如何在SQL UNION中添加Order BY,总是会显示为最后一行?

问题描述:

我有SQL UNION,该语句的第二部分是表示TOTALS的行。我该如何订购?TOTALS总是会显示为最后一行?如何在SQL UNION中添加Order BY,总是会显示为最后一行?

+3

你可以**显示**我们您的查询? – 2009-12-09 20:31:31

+1

只是旁边,你使用UNION ALL而不是UNION,对吧? – 2009-12-10 08:47:18

添加一个额外的列是被联合查询,使该列的第一列你的ORDER BY子句。

所以,如果我开始是这样的:

SELECT product, price 
FROM table 
UNION 
SELECT 'Total' AS product, SUM(price) 
FROM table 

我想补充一个新的列是这样的:

SELECT product, price 
FROM (
    SELECT product, price, 0 AS union_order 
    FROM table 
    UNION 
    SELECT 'Total' AS product, SUM(price), 1 AS union_order 
    FROM table 
) 
ORDER BY union_order 

这样一来,正规产品首先出现,那么总出现在结束。

+0

+1 - 你打败了我! – davek 2009-12-09 20:32:54

+0

SQL Server在外部选择后似乎不喜欢ORDER BY。 – 2010-06-21 18:33:56

+0

如果我需要按产品顺序排序,但排除总计,那么在“总计”之后不应出现带有“u”的产品,那将是什么方式? – user1532976 2016-10-12 23:19:36

你可以尝试添加一个“秩序”列每个查询,并通过该列,然后命令......

SELECT x.* 
FROM 
(
SELECT columns, 2 AS [Order] 
UNION 
SELECT totals, 1 AS [Order] 
) x 
ORDER BY x.[Order] 

select * from 
(
    select 1 as prio 
    , col1 
    , col2 
    ... 
    from tableA 
    union 
    select 2 as prio 
    , totalCol1 
    , totalCol2 
    ... 
    from tableB 
) order by prio 

您是否尝试过使用GROUP BY ROLLUP - 它可能只是想让你想要的,虽然这是很难说的时候你还没有发布查询。

+0

这是一个整洁的小功能。 +1 – Welbog 2009-12-09 20:35:41

+0

是的 - 在理论上比工会更有效率。解决方案之间的一半是使用子查询保理子句计算详细信息,然后在两个联合查询中引用它,一个用于传递细节,另一个用于执行总计,但按汇总进行分组会更好。 – 2009-12-10 08:46:48