2014-01-25 80 views
0
SELECT * FROM A 
1 A ACCEPT 
2 A ACCEPT 
3 C ACCEPT 
4 C ACCEPT 
5 B HOLD 
6 G HOLD 
7 G HOLD 
8 B REJECT 
9 G REJECT 
10 H REJECT 
11 H REJECT 
12 A NEW 
13 H REJECT 
14 H NEW 
15 C NEW 
16 D NEW 
17 E NEW 
18 D ACCEPT 
19 D ACCEPT 
20 F ACCEPT 
21 I NULL 

這是我的表。group by子句where where子句應該在sqlserver中返回零計數

SELECT DISTINCT(PROD) FROM A 
A 
B 
C 
D 
E 
F 
G 
H 
I 

這些是我有的產品。

SELECT PROD,ISNULL(COUNT(*),0) FROM A WHERE STATUS='ACCEPT' GROUP BY PROD 
A 2 
C 2 
D 2 
F 1 

當我執行此我得到了上述結果

但我的要求:

A 2 
B 0 
C 2 
D 2 
E 0 
F 0 
G 0 
H 0 
I 1 

如何去實現它。

請幫我

在此先感謝

+0

不可能用一個簡單的查詢。沒有'status = accept'的記錄都不包含'B'或'E'等等......您需要獲得所有這些字母代碼的列表,然後將其加入到您的表格中,現有的信件仍然計算在內。 –

回答

0

這應該很好地工作:

SELECT T.PROD,SUM(T.FLAG) AS [COUNT] 
FROM 
(
SELECT PROD, 1 AS FLAG 
FROM A 
WHERE STATUS='ACCEPT' 
UNION ALL 
SELECT PROD, 0 AS FLAG 
FROM A 
WHERE STATUS <>'ACCEPT' 
) AS T 
GROUP BY T.PROD 
ORDER BY T.PROD