如何UNION部分不同的sql

时间:2016-02-01 21:53:44

标签: sql-server tsql

我有4个部分,每个部分由2个select语句组成。我需要第2部分与第2部分联合。每个部分都包含自己的ORDER BY。我需要结果首先出现在第1部分,然后是第2部分。仅对每个部分进行排序,但不对整个结果集进行排序。

(select col1,col2,col3,col4,col5 from tableA where col1 = 'x'
UNION ALL
select col1,col2,col3,col4,col5 from tableB where col1 = 'x'
ORDER BY Col3) --1st part ends here
--now I need to UNION the 2nd part
UNION ALL
(select col1,col2,col3,col4,col5 from tableA where col1 <> 'x'
UNION ALL
select col1,col2,col3,col4,col5 from tableB where col1 <> 'x'
ORDER BY Col3) --2nd part ends here

我尝试在SELECT * FROM中包装每个选择(...但是我遇到了ORDER BY的问题。似乎无法使语法正确。

2 个答案:

答案 0 :(得分:3)

只需为此目的添加一列:

select col1,col2,col3,col4,col5, ord = 1 from tableA where col1 = 'x'
UNION ALL
select col1,col2,col3,col4,col5, ord = 1 from tableB where col1 = 'x'
UNION ALL
select col1,col2,col3,col4,col5, ord = 2 from tableA where col1 <> 'x'
UNION ALL
select col1,col2,col3,col4,col5, ord = 2 from tableB where col1 <> 'x'
ORDER BY ord, Col3

答案 1 :(得分:-1)

ORDER BY适用于UNION之后的整个结果集。参见示例C:https://msdn.microsoft.com/en-us/library/ms180026%28v=sql.110%29.aspx

您不能在UNION中的查询中拥有ORDER BY。