CREATE TABLE #T(MC VARCHAR(50))
INSERT INTO #T VALUES('张')
INSERT INTO #T VALUES('艾')
INSERT INTO #T VALUES('杨')
INSERT INTO #T VALUES('李')
INSERT INTO #T VALUES('丁')
--想实现的效果是 姓 始终在第一行,然后#T表里数据排序。
--下边的语句实现出来的效果排序打乱了,姓被排到中间了。如何让ORDER BY只作用于第二句。
SELECT '姓' MC
UNION ALL
SELECT * FROM #T ORDER BY MC--我用下边的方法实现了,还有没有其他好的方法。
SELECT '姓' MC,0 sort
UNION ALL
SELECT MC,1 sort FROM #T ORDER BY sort,MCDROP TABLE #T
SELECT '姓' MC
UNION ALL
SELECT * FROM #T
)A ORDER BY CASE MC WHEN '姓' THEN 0 ELSE 1 END,MC
SELECT '姓' MC
UNION ALL
SELECT * FROM (SELECT TOP 100 PERCENT * FROM #T ORDER BY MC) T
from
(
SELECT '姓' MC
UNION ALL
SELECT * FROM #T
) t
order by (case mc when '姓' else 0 else 1 end)
INSERT INTO @T VALUES('张')
INSERT INTO @T VALUES('艾')
INSERT INTO @T VALUES('杨')
INSERT INTO @T VALUES('李')
INSERT INTO @T VALUES('丁')
--想实现的效果是 姓 始终在第一行,然后#T表里数据排序。
--下边的语句实现出来的效果排序打乱了,姓被排到中间了。如何让ORDER BY只作用于第二句。--SELECT '姓',[sort] = 1 MC
--UNION all
--SELECT * FROM @T ORDER BY MC--我用下边的方法实现了,还有没有其他好的方法。
SELECT '姓' MC,[sort] = 1
UNION ALL
SELECT MC,[sort] = 0 FROM @T
ORDER BY [sort]/*
MC sort
-------------------------------------------------- -----------
张 0
艾 0
杨 0
李 0
丁 0
姓 1(6 行受影响)*/
order by 中使用 CASE 字句。
这种方法不可以,我试过的,在2005里面,子查询中的ORDER BY失效,不起作用。
UNION ALL
SELECT * FROM T ORDER BY MC加一空格
select MC as 姓
from #TO(∩_∩)O
UNION ALL
SELECT MC,[sort] = 0 FROM @T union all
SELECT MC=cast((select count(*) from @t where...) as char(20)),[sort] = 3 ORDER BY [sort]