我有以下场景:
我需要计算有多少客户处于未付款状态。并且此计数必须仅显示计数 >= 2
的计数。这部分我做得正确(我认为):
--SELECTING Client Count
SELECT Client, COUNT(HyphenStatus) as UnpaidCount
FROM CasesFromSimplicity
WHERE HyphenStatus = 'UnPaid' AND FCManager = 'Mike'
GROUP BY Client
HAVING COUNT(HyphenStatus) >= 2
ORDER BY Client ASC
然后我需要为经理 View 创建一个如下所示的表:
+-----------+--------------+----------------+------------+
| FCManager | CountingTwos | CountingThrees | FourOrMore |
+-----------+--------------+----------------+------------+
| Mike | 2 | 1 | 1 |
+-----------+--------------+----------------+------------+
这告诉我,我的顾问 Mike
有两个客户,计数为 2
,一个客户计数为 3
和 一个客户端计数为 4
。
我目前已经进行了以下查询,但这似乎不起作用。
--Selecting the count for manager
SELECT
FCManager
,(SELECT COUNT(HyphenStatus) FROM CasesFromSimplicity WHERE HyphenStatus = 'UnPaid' AND FCManager = 'Mike' HAVING COUNT(HyphenStatus) = 2) CountingTwos
,(SELECT COUNT(HyphenStatus) FROM CasesFromSimplicity WHERE HyphenStatus = 'UnPaid' AND FCManager = 'Mike' HAVING COUNT(HyphenStatus) = 3) CountingThrees
,(SELECT COUNT(HyphenStatus) FROM CasesFromSimplicity WHERE HyphenStatus = 'UnPaid' AND FCManager = 'Mike' HAVING COUNT(HyphenStatus) >= 4) FourOrMore
FROM CasesFromSimplicity
GROUP BY FCManager
有人可以告诉我我做错了什么吗?或者将我发送到正确的位置来阅读此内容。我在搜索时找不到任何东西。 我在发帖时一直在想,我需要在子查询中使用分组依据,但这会返回超过 1 个结果并且不起作用?
我创建了一个SQL Fiddle让您实时查看我的问题。
如有任何帮助,我们将不胜感激,谢谢迈克。
如果我需要进一步解释,请告诉我?我正在使用SQL SERVER 2008
最佳答案
好吧,假设 SQL Server 2005+,您可以这样做:
;WITH CTE AS
(
SELECT FCManager,
Client,
COUNT(HyphenStatus) as UnpaidCount
FROM CasesFromSimplicity
WHERE HyphenStatus = 'UnPaid'
GROUP BY FCManager,
Client
HAVING COUNT(HyphenStatus) >= 2
)
SELECT FCManager,
SUM(CASE WHEN UnpaidCount = 2 THEN 1 ELSE 0 END) CountingTwos,
SUM(CASE WHEN UnpaidCount = 3 THEN 1 ELSE 0 END) CountingThrees,
SUM(CASE WHEN UnpaidCount > 3 THEN 1 ELSE 0 END) FourOrMore
FROM CTE
GROUP BY FCManager
Here is修改后的sqlfiddle。
关于SQL计数麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23544709/