GROUP BY子句中的错误在SELECT UNION ALL ORDER BY查询

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查询...

有人可以向我解释这个吗?

+0

“TABLE_A”和“TABLE_B”的表结构是什么?也许联盟本身有问题。 –

+0

不,它们具有相同的结构,即四个变量(而dum.var就是其中之一)。实际上,当我省略'order by'并只运行括号中的内容时,它运行良好... – Lili

+0

这是您正在使用的确切查询吗?或者你可能有一些MAX,MIN,SUM,AVG或其他什么查询? – Tyron78

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] 

两个表格中的值必须相同。