sql-server - 如何在 SQL Server 中使用 ORDER BY 和 UNION ALL?
问题描述
我有 3 个表,我需要使用UNION ALL
.
假设表 (T1,T2,T3) 包含如下列:
表 T1
Name, Qty, Amt, EXP
表 T2
Qty, Amt, EXP, SRNO
表 T3
Name, Qty, EXP
我的查询是这样的:
SELECT Name, Qty, Amt, EXP
FROM T1
UNION ALL
SELECT NULL AS Name, Qty, Amt, EXP
FROM T2
ORDER BY SRNO
UNION ALL
SELECT Name, Qty, NULL Amt, EXP
FROM T3
我也试过
SELECT Name, Qty, Amt, EXP
FROM T1
UNION ALL
SELECT Name, Qty, Amt, Exp
FROM
(SELECT *
FROM T2
ORDER BY SRNO) AS T21
UNION ALL
SELECT Name, Qty, NULL Amt, EXP
FROM T3
T2 的结果不均匀,我想按 SRNO(integer) 对其进行排序,但在使用联合时出现错误。
注意我不想接受SRNO
,UNION ALL
我只需要它来对数据进行排序
解决方案
您可以尝试在当前联合查询中显式添加两个排序列:
SELECT Name, Qty, Amt, Exp
FROM
(
SELECT Name, Qty, Amt, 'EXP' AS Exp, 1 AS p1, 1 AS p2 FROM T1 -- place this row 1st
UNION ALL
SELECT Name, Qty, Amt, Exp, 2, SRNO FROM T2 -- middle
UNION ALL
SELECT Name, Qty, NULL, 'EXP', 3, 1 FROM T3 -- place this row 3rd
) t
ORDER BY
p1, p2;
在这里,我们向联合查询添加两个虚拟排序级别。p1
排序级别将单个记录从第T1
一个开始,将单个记录从T3
最后一个开始,并将记录从T2
中间开始。然后,第二个排序级别按升序p2
对记录进行排序。如果不是整数列,那么我们将不得不对上述答案进行轻微更改,但它应该仍然有效。T2
SRNO
SRNO