举例:我有一个表TB,如下
id fz
1 第一期第二版
2 第一期第一版
3 第一期第一版
4 第一期第三版
5 第一期第四版
6 第一期第一版我现在要先对fz进行group by,然后根据group by 后的内容正常排序成“第一期第一版、第一期第二版、第一期第三版、第一期第四版”有什么办法么?
id fz
1 第一期第二版
2 第一期第一版
3 第一期第一版
4 第一期第三版
5 第一期第四版
6 第一期第一版我现在要先对fz进行group by,然后根据group by 后的内容正常排序成“第一期第一版、第一期第二版、第一期第三版、第一期第四版”有什么办法么?
insert into tb values(1 , '第一期第二版')
insert into tb values(2 , '第一期第一版')
insert into tb values(3 , '第一期第一版')
insert into tb values(4 , '第一期第三版')
insert into tb values(5 , '第一期第四版')
insert into tb values(6 , '第一期第一版')
goselect * from tb order by case when fz like '%第一版%' then 1 when fz like '%第二版%' then 2 when fz like '%第三版%' then 3 when fz like '%第四版%' then 4 enddrop table tb /*
d fz
----------- --------------------
2 第一期第一版
3 第一期第一版
6 第一期第一版
1 第一期第二版
4 第一期第三版
5 第一期第四版(所影响的行数为 6 行)
*/
(
id int identity(1,1) primary key,
fz nvarchar(50)
)
insert into #TT1 select '第一期第二版'
insert into #TT1 select '第一期第一版'
insert into #TT1 select '第一期第一版'
insert into #TT1 select '第一期第三版'
insert into #TT1 select '第一期第四版'
insert into #TT1 select '第一期第一版'select * from #TT1
order by
(
case when charindex('第一版',fz)>0 then 0.1 else
case when charindex('第二版',fz)>0 then 0.2 else
case when charindex('第二版',fz)>0 then 0.3 else
0.4 end
end
end
)id fz
----------- --------------------------------------------------
2 第一期第一版
3 第一期第一版
6 第一期第一版
1 第一期第二版
4 第一期第三版
5 第一期第四版
order by
(
case when charindex('第一版',fz)>0 then 0.1 else
case when charindex('第二版',fz)>0 then 0.2 else
case when charindex('第三版',fz)>0 then 0.3 else
0.4 end
end
end
)
id fz
----------- --------------------------------------------------
2 第一期第一版
3 第一期第一版
6 第一期第一版
1 第一期第二版
4 第一期第三版
5 第一期第四版
insert @a select 1 ,'第一期第二版'
union all select 2 ,'第一期第一版'
union all select 3 ,'第一期第一版'
union all select 4 ,'第一期第三版'
union all select 5 ,'第一期第四版'
union all select 6 ,'第一期第一版' SELECT fz FROM @a a ,
(SELECT 1 id,'一' v union ALL
SELECT 2 id,'二' union ALL
SELECT 3 id,'三' union ALL
SELECT 4 id,'四' union ALL
SELECT 5 id,'五' union ALL
SELECT 6 id,'六' union ALL
SELECT 7 id,'七' union ALL
SELECT 8 id,'八' union ALL
SELECT 9 id,'九' union ALL
SELECT 10 id,'十'
)b
WHERE charindex(v+'版',fz)>0
GROUP BY fz
ORDER BY max(b.id)--result
/*fz
--------------------
第一期第一版
第一期第二版
第一期第三版
第一期第四版(所影响的行数为 4 行)
*/
fz
-------------------
第一期第一版
第一期第二版
第一期第三版
第一期第四版