用 group by 计算行在两行中不明显

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

我有一个 SQL 查询试图创建一个计费报告,其中每一行都应该是

customer | account | api1 | api2 | api3

ApiCalled 表跟踪哪个客户和帐户排列调用了哪个 API。

每个客户可以有多个帐户,我想显示按客户和帐户分组的每个不同端点的行数。以下是我到目前为止所拥有的。

    SELECT 
        c.Name As Customer, 
        sa.Name as account, 
        COUNT(CASE cuec.EndpointCalled WHEN 0 THEN 1 ELSE NULL END) api1,
        COUNT(CASE cuec.EndpointCalled WHEN 1 THEN 1 ELSE NULL END) api2,
        COUNT(CASE cuec.EndpointCalled WHEN 2 THEN 1 ELSE NULL END) api3
    FROM
        Customers.ApiCalled cuec
        INNER JOIN Customers.Customers c
            ON c.CustomerId = cuec.CustomerId
       INNER JOIN Customers.Accounts sa
            ON sa.CustomerId = cuec.CustomerId
    GROUP BY
         sa.Name, c.Name

我遇到的问题是,在这种情况下,当客户有 2 个帐户并从这两个帐户调用了一次端点时,我希望得到这样的结果

customer | account | api1 | api2 | api3
cust1    | acc1    | 1    |  0   |  0
cust1    | acc2    | 1    |  0   |  0

但是我得到了这个

customer | account | api1 | api2 | api3
cust1    | acc1    | 2    |  0   |  0
cust1    | acc2    | 2    |  0   |  0

也许我将 Case 放入伯爵中,让自己陷入了困境。一些帮助将不胜感激

sql sql-server group-by case distinct
1个回答
0
投票

感谢 Stu 和 Craig 的评论,我重新审视了我的原始查询,将其分解为一个子查询,然后加入客户的姓名和有效的帐户,

在这个过程中我意识到了我的错误,应该是

INNER JOIN Customers.Accounts sa
            ON sa.AccountId= cuec.AccountId

我在加入帐户表而不是帐户 ID 时错误地使用了客户 ID

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