如何在SQL UNION中添加Order BY,总是会显示为最后一行?
添加一个额外的列是被联合查询,使该列的第一列你的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
这样一来,正规产品首先出现,那么总出现在结束。
+1 - 你打败了我! – davek 2009-12-09 20:32:54
SQL Server在外部选择后似乎不喜欢ORDER BY。 – 2010-06-21 18:33:56
如果我需要按产品顺序排序,但排除总计,那么在“总计”之后不应出现带有“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
- 它可能只是想让你想要的,虽然这是很难说的时候你还没有发布查询。
这是一个整洁的小功能。 +1 – Welbog 2009-12-09 20:35:41
是的 - 在理论上比工会更有效率。解决方案之间的一半是使用子查询保理子句计算详细信息,然后在两个联合查询中引用它,一个用于传递细节,另一个用于执行总计,但按汇总进行分组会更好。 – 2009-12-10 08:46:48
你可以**显示**我们您的查询? – 2009-12-09 20:31:31
只是旁边,你使用UNION ALL而不是UNION,对吧? – 2009-12-10 08:47:18