0

私はSQLが初めてで、この問題を抱えています。列として id と flag を持つテーブル一時があります。

ID FLAG               
-- ---- 
A    1                      
A    1                      
A    0                      
B    1                      
B    0                      
B    0                      
C    0                      
C    0                      
C    0   

ID ごとに 1 と 0 のカウントが必要です。

望ましい出力は

ID    OnesCount    ZerosCount
---   ---------    ----------
A       2            1
B       1            2
C       0            3

私はたくさん試しましたが、それらを個別に入手できます

select id,count(*) ZerosCount from temp where flag = 0 group by id

select id,count(*) OnesCount from temp where flag = 1 group by id

しかし、参加して目的の出力を取得する方法を理解していません。誰か助けてくれませんか

4

2 に答える 2

2

この特定のケースでは、次のようにすることができます。

select customer_id ID, 
       sum(pwr_flag) OnesCount, 
       sum(1-pwr_flag) ZerosCount 
  from temp_pwr 
 group by customer_id

より一般的なケースでは、次を使用できますcase when

select customer_id ID, 
       sum(case pwr_flag when 1 then 1 else 0 end) OnesCount, 
       sum(case pwr_flag when 0 then 1 else 0 end) ZerosCount 
       sum(case pwr_flag when 17 then 1 else 0 end) SeventeensCount 
  from temp_pwr 
 group by customer_id
于 2013-09-30T11:26:28.940 に答える
0
select customer_id, 
   count(case when pwr_flag = 0 then 1 end) ZerosCount,
   count(case when pwr_flag = 1 then 1 end) OnessCount 
from temp_pwr
group by customer_id
于 2013-09-30T11:26:52.830 に答える