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
我正在尝试在 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