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

GROUP BY clause error in a SELECT UNION ALL ORDER BY query

我正在尝试在 SQL SERVER

中的联合之后对 table 进行排序

我在几个地方读过(这里例如: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 查询...

谁能给我解释一下?

感谢上面评论中的 Tyron78,我发现了错误。

实际查询是:

SELECT * 
FROM
(
SELECT
        *
FROM
#TABLE1
UNION ALL
SELECT
        *
FROM
#TABLE2
) AS Z
ORDER BY sum([Units]) DESC, [Distance], [ID], [Product]

问题出在 sum() 中,因为我之前已经在 table1 和 table2 中求和了。 所以好的查询如下:

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]

两个表中的必须相同。

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