SQL汇总数据以获取前X个

问题描述 投票:0回答:1

我有这张桌子:

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'

我也需要查询以获取列,也不能为空。

sql-server
1个回答
0
投票

我尝试运行查询,它运行正常。

© www.soinside.com 2019 - 2024. All rights reserved.