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

解决方案 »

  1.   

    SELECT MC FROM(
    SELECT '姓' MC
    UNION ALL
    SELECT * FROM #T
    )A ORDER BY CASE MC WHEN '姓' THEN 0 ELSE 1 END,MC
      

  2.   

    --TRY
    SELECT '姓' MC
    UNION ALL
    SELECT * FROM (SELECT TOP 100 PERCENT * FROM #T ORDER BY MC) T
      

  3.   

    select *
    from
    (
      SELECT '姓' MC
      UNION ALL
      SELECT * FROM #T
    ) t
    order by (case mc when '姓' else 0 else 1 end)
      

  4.   

    DECLARE @T TABLE (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 '姓',[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 行受影响)*/
      

  5.   

    学写了。。
    order by 中使用 CASE 字句。
      

  6.   


    这种方法不可以,我试过的,在2005里面,子查询中的ORDER BY失效,不起作用。
      

  7.   

    SELECT ' 姓' MC
    UNION ALL
    SELECT * FROM T ORDER BY MC加一空格
      

  8.   


    select MC as 姓
    from #TO(∩_∩)O
      

  9.   

    我也是使用楼主的方法排序,觉得楼主不用再找更高效的算法了,加入一个标识顺序的字段应该是最简便的方法了。楼上有不少能实现要求的语句,但是我认为执行效率未必就高,而且有可能不止2种排序,一般极可能出现的第3种情况就是累计:SELECT '姓' MC,[sort] = 1
    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]