我有一个 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 放入伯爵中,让自己陷入了困境。一些帮助将不胜感激
感谢 Stu 和 Craig 的评论,我重新审视了我的原始查询,将其分解为一个子查询,然后加入客户的姓名和有效的帐户,
在这个过程中我意识到了我的错误,应该是
INNER JOIN Customers.Accounts sa
ON sa.AccountId= cuec.AccountId
我在加入帐户表而不是帐户 ID 时错误地使用了客户 ID