首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用聚合函数和CASE-WHEN语句的T-SQL查询

使用聚合函数和CASE-WHEN语句的T-SQL查询
EN

Stack Overflow用户
提问于 2018-06-22 16:02:59
回答 1查看 93关注 0票数 0

在T-SQL中,我有一个简单但非常重要的概念要讲清楚。

我正在编写大量针对表的T-SQL查询,其中包含大量聚合和分组依据。

现在,在我的T-SQL查询的SELECT子句中,我有一个CASE-WHEN语句。如下所示:

语句1:

代码语言:javascript
复制
SELECT X, Y, Z, 

A = CASE
        WHEN P = 1 THEN B
        ELSE Q
    END,

SUM(Sales)

FROM mytable

GROUP BY  
X, Y, Z,
CASE
     WHEN P = 1 THEN B
     ELSE Q
END

现在可以将语句1写成语句2了吗?

语句2:

代码语言:javascript
复制
SELECT X, Y, Z, 

A = CASE
        WHEN P = 1 THEN B
        ELSE Q
    END,

SUM(Sales)

FROM mytable

GROUP BY  
X, Y, Z,
P, B, Q

语句1=语句2吗?

是否可以在GROUP BY子句中将SELECT子句中的CASE-WHEN修改为单独的列?

结果集是否总是相同的?

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 16:55:23

区别取决于您可能从列PBQ中获得的不同值的数量,而不是CASE语句的结果。你可以在这个例子中发现其中的不同之处。

代码语言:javascript
复制
IF OBJECT_ID('tempdb..#Data') IS NOT NULL
    DROP TABLE #Data

CREATE TABLE #Data (
    P INT,
    B INT,
    Q INT,
    Sales INT)

INSERT INTO #Data (
    P,
    B,
    Q,
    Sales)
VALUES
    (1, 20, 300, 1000),
    (1, 20, 400, 500),
    (2, 1, 1, 50),
    (2, 1, 1, 250)


-- Statement 2
SELECT
    P,
    B,
    Q,
    TotalSales = SUM(D.Sales)
FROM
    #Data AS D
GROUP BY
    P,
    B,
    Q

/*
    All different combinations of PBQ and listed, and their sales added

    P   B   Q   TotalSales
    1   20  300 1000
    1   20  400 500
    2   1   1   300
*/



-- Statement 1
SELECT
    CaseResult = CASE WHEN P = 1 THEN B ELSE Q END,
    TotalSales = SUM(D.Sales)
FROM
    #Data AS D
GROUP BY
    CASE WHEN P = 1 THEN B ELSE Q END

/*

    The grouping value depends on value B when P = 1 (and not on Q!) so 
    all records with P = 1 and same B are grouped together and
    all records with P = 0 and same Q are grouped together

    CaseResult  TotalSales
    1           300
    20          1500
*/

当您的数据从CASEPBQ的组合没有生成不同的值时,可能会出现这种情况,在这种情况下,两个查询的结果将是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50983391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档