比如有一张学生表student 和教师表 teacher , 我们要查询所有的教师学生的姓名和年龄,教师排前面,学生排后面,分别按字母顺序,则可能会想写一个这样的Sql语句: (注意,这个语句只是为了说明问题,这并不是一个正确的语句) SELECT Name,Age FROM Teacher ORDER BY Name UNION SELECT Name,Age FROM Student ORDER BY Name 实际上,MSSQL并不允许我们写这样的语句,因此将会报错 UNION 附近有语法错误. 其实我们只需要绕开,让ORDER BY 和UNION 不在同一层, 让ORDER 在子查询内而 UNION 在外面(因为我们要先教师学生分开,然后再名字) 这样得到了另外一个Sql语句:(注意,这依然不是一个正确的语句) SELECT * FROM (SELECT Name,Age FROM Teacher ORDER BY Name) A UNION SELECT * FROM (SELECT Name,Age FROM Student ORDER BY Name) B 这句Sql语句依然无法通过,因为这有触犯了MSSQL的另外一条语法规定,在子查询中, 如果不存在TOP语句则ORDER BY子句无效. 但是我们需要的是全部结果,并不需要TOP的功能. 显然, TOP 100% 是个解决的方法. 因为100%就是全部了. 最后,这条蹩脚的Sql语句出炉了: SELECT * FROM (SELECT TOP 100 PERCEND Name,Age FROM Teacher ORDER BY Name) A UNION SELECT * FROM (SELECTTOP 100 PERCEND Name,Age FROM Student ORDER BY Name) B 这就是最后的结果, 为了让ORDER BY 和UNION同时发挥作用,绕了2个弯. 
可是我按照上面的方法还是报错啊:如果语句中包含 UNION 运算符,那么 ORDER BY 子句中的项就必须出现在选择列表中。 或者有什么方法可以把两个linq查询的结果合并在一起呢?

解决方案 »

  1.   

    SELECT TOP 100 PERCENT 不如直接取了
      

  2.   

    select A from tb1 union all
    select A from tb2
    order by A 
      

  3.   

    SELECT Name,Age FROM Teacher 
    UNION 
    SELECT Name,Age FROM Student
    ORDER BY Name?
      

  4.   

    select Name,Age from teacher
    union all
    select Name,Age from student
    order by Name
      

  5.   

    select name, age ,idx=1 from teacher
    union all
    select name,age,idx=2 from student
    order by idx, name