測試資料:
create table tb1(id int,col1 varchar(10),col2 int)
insert tb1 select 1,'aa',111
union all select 2,'aa',111
union all select 3,'aa',111
union all select 4,'bb',222
union all select 5,'bb',222
union all select 6,'cc',333
union all select 7,'cc',333
union all select 8,'cc',333
union all select 9,'cc',333
create table tb2(col1 varchar(10),size int)
insert tb2 select 'aa',2
union all select 'cc',2
union all select 'bb',0
go 問題描述:
tb1 與 tb2 通過 col2 關聯,tb2的col1包含所有tb1.col1。要求寫函式實現:
tb1中的col1按照tb2中的col1定義的記錄數,進行排列。
例如:在tb2中:
aa 的size=2,就先排2條aa記錄
cc 的size=2, 並且在aa後面,所以接著排2條cc的記錄
而bb 在tb2中定義是0條,則不參與排序,始終顯示在最後
重複迴圈,不夠的由後面的記錄補上最終實現如下排序結果:
id col1 col2
----------- ---------- -----------
1 aa 111
2 aa 111
6 cc 333
7 cc 333
3 aa 111
8 cc 333
9 cc 333
4 bb 222
5 bb 222
--*/
--排序函式
create function f_sort(@id int,@col1 varchar(10))
returns varchar(20)
asbegin
declare @i int,@size int,@j int
set @i=0
select @i=case when @size is null then @i+1 else @i end
,@size=case when @col1=col1 then size else @size end
from tb2
if @size=0 return(replicate(20,'9'))
select @j=count(*)
from tb1
where id<@id
and return(right(10000000000+isnull(@j,0)/@size,10)+right(10000000000+@i,10))
endgo
--呼叫實現查詢
select * from tb1 a
order by dbo.f_sort(id,col1)
go--刪除測試
drop table tb1,tb2
drop function f_sort
根據排序定義表排序資料
根據排序定義表排序資料 測試資料 create table tb1 id int,col1 varchar 10 col2 int insert tb1 select 1,aa 111 union all select 2,aa 111 union all select 3,aa 111 union...
根據排序定義表排序資料
根據排序定義表排序資料 測試資料 create table tb1 id int,col1 varchar 10 col2 int insert tb1 select 1,aa 111 union all select 2,aa 111 union all select 3,aa 111 union...
根據排序定義表排序資料
根據排序定義表排序資料 測試資料 create table tb1 id int,col1 varchar 10 col2 int insert tb1 select 1,aa 111 union all select 2,aa 111 union all select 3,aa 111 union...