2012-09-10 69 views
1

請查看下錶:計數和具有查詢

Id Code  Name  State  District  Status 
----------------------------------------------------------- 
1  10001 ABC  Gujarat  Jamnagar  1 
2  10002 BCA  Gujarat  Amreli   0 
3  10003 XYZ  NJ   ACX   1 
4  10001 VBC  Gujarat  Jamnagar  1 

我有查詢下面

SELECT STATE, 
    District, 
    SUM(CASE 
      WHEN STATUS = 0 
       THEN 1 
      ELSE 0 
      END) Active, 
    SUM(CASE 
      WHEN STATUS = 1 
       THEN 1 
      ELSE 0 
      END) InActive 
FROM TableA 
GROUP BY STATE, 
    District 

現在它將會返回下面的結果對我來說

State District Active InActive 
------------------------------------ 
Gujarat Jamnagar 0  2 
Gujarat Amreli  1  0 
NJ  ACX  0  1 

但我需要算單行,其Code是相同的,所以它將返回InActive作爲1的 StateGujaratDistrictJamnagar不是2.

我該如何做到這一點?

+0

所以你的意思是數應適用於不同的國家和地區?在下面檢查我的答案。 –

回答

1

你如何明確地選擇子查詢中的所有列?

SELECT STATE, 
    District, 
    SUM(CASE 
      WHEN STATUS = 0 
       THEN 1 
      ELSE 0 
      END) Active, 
    SUM(CASE 
      WHEN STATUS = 1 
       THEN 1 
      ELSE 0 
      END) InActive 
FROM (
    SELECT DISTINCT STATE, 
     District, 
     STATUS 
    FROM tableA 
    ) a 
GROUP BY STATE, 
    District 

SQLFiddle Demo

1

Rater than SUM,select MAX,所以這些值不會聚合。

+0

但我可以有兩個以上的記錄..我需要基於區和州的整個行的總和 –

+0

@LajjaThaker:'MAX'也會考慮所有記錄。如果你的集合包含'1,0,1',那麼該集合中的'MAX'將產生'1',其中'SUM'將產生'2'。 –

+0

[SQLFiddle](http://sqlfiddle.com/#!2/acd4b/3/0) –