我有这张桌子:
CREATE TABLE TESTTABLE
(
YEAR nvarchar(max) NOT NULL,
QUARTER nvarchar(max) NOT NULL,
COUNTRY nvarchar(max) NOT NULL,
CUSTOMER nvarchar(max) NOT NULL,
AMOUNT bigint NOT NULL
)
这是我要在上表中运行的查询
WITH CTE_1(Y,Q,C,CU,A) AS
(
SELECT TOP (10)
YEAR, QUARTER,
COUNTRY, CUSTOMER,
SUM(AMOUNT) AS AMT
FROM
[BikeStores].[dbo].[TESTTABLE]
WHERE
CUSTOMER NOT LIKE 'Others'
AND YEAR LIKE '2020'
AND QUARTER LIKE 'Q1 2020'
AND COUNTRY LIKE 'INDIA'
GROUP BY
YEAR, QUARTER, COUNTRY, CUSTOMER
)
SELECT * FROM CTE_1
UNION ALL
SELECT
YEAR, QUARTER, COUNTRY, 'Others',
SUM(T.AMOUNT)
FROM
DBO.TESTTABLE AS T
WHERE
CUSTOMER NOT IN (SELECT CTE_1.CU FROM CTE_1)
AND YEAR LIKE '2020'
AND QUARTER LIKE 'Q1 2020'
AND COUNTRY LIKE 'INDIA'
GROUP BY
YEAR, QUARTER, COUNTRY, 'Others';
运行此查询,出现错误:
Msg 8120,第16级,状态1,第21行在选择列表中,'DBO.TESTTABLE.YEAR'列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。
它起作用了,如果我让SELECT之后的空列像下面的代码一样。
UNION ALL
SELECT '','','','Others',SUM(T.AMOUNT)
FROM DBO.TESTTABLE AS T
WHERE CUSTOMER NOT IN (SELECT CTE_1.CU FROM CTE_1) AND YEAR LIKE '2020' AND QUARTER LIKE 'Q1 2020' AND COUNTRY LIKE 'INDIA'
我也需要查询以获取列,也不能为空。
我尝试运行查询,它运行正常。