Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个Sql计数_Sql_Count - Fatal编程技术网

多个Sql计数

多个Sql计数,sql,count,Sql,Count,我的数据库中有一个表(tbl_MatterItem),用于跟踪项目的发送和接收日期。如果尚未发送或接收,则该值为空。我有另一个表(tbl_事项),我正在链接到该表,以获取该特定项目的付费律师 BillingLawyer ItemSent ItemReceived ------------- -------- ------------ Alison 09/09/09 NULL Alison 10/10/10

我的数据库中有一个表(tbl_MatterItem),用于跟踪项目的发送和接收日期。如果尚未发送或接收,则该值为空。我有另一个表(tbl_事项),我正在链接到该表,以获取该特定项目的付费律师

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
谢谢。我通常把它放在零位只是为了显得过于明显:)