2012-03-15 13 views
1

フィールドのカウントを取得してグループ化するクエリを作成しますが、すべての値は、カウントが0行が見つからない場合、GROUP BYクエリでSELECT COUNT(*)を0にするにはどうすればいいですか?

であっても、ここで私が持っているものです。

SELECT COUNT(*) 
     ,PMI 
    FROM Items AS AA 
    JOIN Headers AS BB 
    ON AA.DocID = BB.ID 
WHERE (DocDate = CAST(CONVERT(varchar(8), GETDATE() - 1, 1) AS datetime)) 
    AND PMI != '' 
GROUP BY PMI 

は、ここで私が見たいものだ:

01:

COUNT  PMI 
    1  900330 
    5  900702 
    0  900550 
    0  900331 

しかし、ここでは、私が得てんですよ

COUNT  PMI 
    1  900330 
    5  900702 

私はこれを達成するためのクエリを書く必要がありませんでしたので、これが簡単なことをお詫び申し上げます。

編集:私はこれらのテーブルには、私が探しているすべての項目が含まれていないことに気付きました。私はカウントを照会したいこれらすべての項目を含む 'ルックアップ'と呼ばれるルックアップテーブルを持っています。

EDIT 2:ありがとうございました。ビューを作成し、ルックアップテーブルと外部結合を使用することで、動作させました。トリックは素晴らしかったですか?

+0

他の列の値、特に 'AA.DocID'と' BB.ID' – sll

+0

が '' Items'テーブルや 'Headers'テーブルのPMI'の一部であることを示してください? –

+0

PMIはItemsテーブルの一部です。 – jdidsQAA

答えて

1

INNER JOINを使用していますが、一致するものがない場合は行を返しません。代わりにOUTER JOINを使用してください。

PMIItems上にあると仮定すると:

SELECT PMI, COUNT(BB.ID) 
    FROM Items AS AA 
    LEFT JOIN Headers AS BB 
    ON AA.DocID = BB.ID 
WHERE (DocDate = CAST(CONVERT(varchar(8), GETDATE() - 1, 1) AS datetime)) 
    AND PMI != '' 
GROUP BY PMI 
+0

私は脳のおならを持っていました...私が戻したいアイテムのすべてがどちらかのテーブルにあるのではなく、「ルックアップ」と呼ばれる別の別のテーブルにあると認識しました。 – jdidsQAA

+0

私はそれも正しいことができると信じて、IDの値に左右されます。 – sll

+0

私はそれを理解しましたが、うまく動作しませんでした。私は別の刺しを取るよ – jdidsQAA

1

簡単な答えは全体のSQLクエリをラップし、COUNT列にSUMを追加することです。

SELECT SUM(yourCountField), someOtherField1, someOtherField2 
FROM 
(
    SELECT COUNT(yourCountField), someOtherField1, someOtherField2 
    FROM .... 
) 
GROUP BY someOtherField1, someOtherField2 
+0

'yourCountField' ...確かに!時には私はまだそれを行う方法を覚えていないことは明らかです! – Benj