如何在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(整数(排序,但在使用并集时出错。

注意我不想在UNION ALL中使用SRNO,我只需要它来对数据进行排序

您可以尝试在当前联合查询中显式添加两个排序列:

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的记录放在在中间。然后,第二排序级别p2SRNO的升序对T2记录进行排序。如果SRNO不是整数列,那么我们将不得不对上面的答案进行轻微的更改,但它应该仍然有效。

最新更新