2011-06-23 11 views
1

アイテムを送受信する日付を追跡するテーブル(tbl_MatterItem)がDBにあります。送信または受信されていない場合、値はNULLです。特定のアイテムのBillingLawyerを取得するために、私がリンクしている別のテーブル(tbl_Matter)があります。複数のSQLカウント

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 

各弁護士の名前、送信されたアイテムの数、および受け取ったアイテムの数で1つの行を検索したいと思います。以下は

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 

Iの任意のアイデアのように見えます間違っていますか?

答えて

3

これを試してみてください:

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 
+0

+1ベストソリューションimho。 'else 0'を省略することができます。' else'を指定しないと、不一致の 'case'が' null'を返します。 – Andomar

+0

ありがとうございます。私は通常、あまりにも明らかにするためにゼロにしておきます:) –

+0

パーフェクト、ありがとう!!! – JGow

0

あなたはItemSentにグループ化しているので、count(distinct ItemSent)新しいグループがItemSentのそれぞれ異なる値のために作成され、すべての後に1または0を返し、count()ますそのグループに適用されます。

BillingLawyerごとにアイテムを数えたい場合は、BillingLawyerにグループ化しますが、ItemSentではグループ化しないでください。

0

最初にDISTINCTを削除すると、それぞれの日付がカウントされると思われます。

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 
0

GROUP BYにはItemSent, itemreceivedを含めないでください。 のみ使用GROUP BY BillingLawyer

関連する問題