GROUP BY子句中的错误在SELECT UNION ALL ORDER BY查询
问题描述:
我试图理清工会后,表中所有的SQL SERVERGROUP BY子句中的错误在SELECT UNION ALL ORDER BY查询
我在几个地方(How to use order by with union all in sql?这里例如)已读写:
SELECT *
FROM
(
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
) dum
-- ORDER BY .....
不过,我不断收到一个错误说:
Column 'dum.var' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
,而我没有任何GROUP BY查询...
有人可以向我解释这个吗?
答
DECLARE @t1 TABLE(
ID INT
,Val INT
);
DECLARE @t2 TABLE(
ID INT
,Val INT
);
INSERT INTO @t1 VALUES (1, 10), (2, 20), (3, 30);
INSERT INTO @t2 VALUES (1, 40), (2, 50), (3, 60);
SELECT *
FROM (
SELECT x.ID, SUM(x.Val) SumVal
FROM (
SELECT ID,
Val
FROM @t1
UNION ALL
SELECT ID,
Val
FROM @t2
) x
GROUP BY x.ID
) y
ORDER BY SumVal
答
感谢上面评论中的Tyron78,我发现了这个错误。
的实际查询为:
SELECT *
FROM
(
SELECT
*
FROM
#TABLE1
UNION ALL
SELECT
*
FROM
#TABLE2
) AS Z
ORDER BY sum([Units]) DESC, [Distance], [ID], [Product]
的问题是在和(),因为我已经在这两个Table 1和Table前求和。 因此,好查询如下:
SELECT *
FROM
(
SELECT
*
FROM
#TABLE1
UNION ALL
SELECT
*
FROM
#TABLE2
) AS Z
ORDER BY [Units] DESC, [Distance], [ID], [Product]
谢谢大家!
答
您将需要提供要对结果集进行排序的列名称。
SELECT *
FROM
(
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
) dum
order by <column_name> [asc|desc]
两个表格中的值必须相同。
“TABLE_A”和“TABLE_B”的表结构是什么?也许联盟本身有问题。 –
不,它们具有相同的结构,即四个变量(而dum.var就是其中之一)。实际上,当我省略'order by'并只运行括号中的内容时,它运行良好... – Lili
这是您正在使用的确切查询吗?或者你可能有一些MAX,MIN,SUM,AVG或其他什么查询? – Tyron78