多个Sql计数
我的数据库中有一个表(tbl_MatterItem),用于跟踪项目的发送和接收日期。如果尚未发送或接收,则该值为空。我有另一个表(tbl_事项),我正在链接到该表,以获取该特定项目的付费律师多个Sql计数,sql,count,Sql,Count,我的数据库中有一个表(tbl_MatterItem),用于跟踪项目的发送和接收日期。如果尚未发送或接收,则该值为空。我有另一个表(tbl_事项),我正在链接到该表,以获取该特定项目的付费律师 BillingLawyer ItemSent ItemReceived ------------- -------- ------------ Alison 09/09/09 NULL Alison 10/10/10
BillingLawyer ItemSent ItemReceived
------------- -------- ------------
Alison 09/09/09 NULL
Alison 10/10/10 NULL
Alison 11/11/11 13/11/11
Alison 12/12/12 NULL
我想为每个律师检索一行,其中包含他们的姓名、发送的项目数量和接收的项目数量
BillingLawyer Sent Received
------------- ----- --------
Alison 4 1
以下是我目前的情况:
SELECT BillingLawyer,
(SELECT COUNT(DISTINCT itemSent)FROM tbl_matteritem mit WHERE itemid=2 AND itemSent IS NOT NULL AND mit.ItemSent= mi.itemSent) AS [Sent],
(SELECT COUNT(DISTINCT itemReceived)FROM tbl_matteritem mitm WHERE itemid=2 AND itemReceived IS NOT NULL AND mitm.itemreceived = mi.itemreceived)AS Received
FROM tbl_matteritem mi JOIN tbl_matter m ON mi.matterid = m.matterid
GROUP BY BillingLawyer, ItemSent, itemreceived
ORDER BY 1
然而,我的结果显示了一个额外的记录和什么似乎是位值
BillingLawyer Sent Received
------------- ---- --------
Alison 0 0
Alison 1 1
Alison 1 0
Alison 1 0
Alison 1 0
你知道我哪里出错了吗?试试这个:
SELECT
BillingLawyer,
SUM(CASE WHEN ItemSent IS NOT NULL THEN 1 ELSE 0 END) AS Sent,
SUM(CASE WHEN ItemReceived IS NOT NULL THEN 1 ELSE 0 END) AS Received
FROM
tbl_matteritem mi
JOIN tbl_matter m ON
mi.matterid = m.matterid
GROUP BY BillingLawyer
ORDER BY BillingLawyer
您正在对
itemssent
进行分组,因此count(distinct itemssent
)将返回1或0。毕竟,将为itemssent
的每个不同值创建一个新组,然后将count()
应用于该组
如果您想按
BillingLawyer
计算项目数,请按BillingLawyer
分组,但不要按项目发送
首先删除不同的
,因为它将计算每个日期
SELECT BillingLawyer,
(SELECT COUNT( itemSent)FROM tbl_matteritem mit WHERE itemid=2 AND itemSent IS NOT NULL AND mit.ItemSent= mi.itemSent) AS [Sent],
(SELECT COUNT( itemReceived)FROM tbl_matteritem mitm WHERE itemid=2 AND itemReceived IS NOT NULL AND mitm.itemreceived = mi.itemreceived)AS Received
FROM tbl_matteritem mi JOIN tbl_matter m ON mi.matterid = m.matterid
GROUP BY BillingLawyer, ItemSent, itemreceived
ORDER BY 1
不要将
itemssent、itemsreceived
包含在分组依据中
。
仅使用
分组计费律师
+1最佳解决方案imho。您可以省略else 0
:如果没有else
,则不匹配的大小写
返回null
谢谢。我通常把它放在零位只是为了显得过于明显:)