2017-05-06 13 views
0

私は状況とIDに基づいてSQL Serverデータベースで行をグループ化し、数を表示するシナリオがあります。私がしようとしていたが、私は結果がSQL Server:複数の行の値を1つの行に

bid status accept rejected noResp 
-------------------------------------- 
1  1  1  1  0 
2  1  1  1  0 
3  1  1  1  0 
2  2  0  2  0 
3  2  0  1  0 

ある

select 
    req_id as bid, status, 
    (case when status = 1 then 1 else 0 end) as accept, 
    count(case when status = 2 then 1 else 0 end) as rejected, 
    (case when status = 3 then 1 else 0 end) as noResp 
from 
    temp_allo 
group by 
    req_id, status 

の下のような独立した別々の行の値を取得しています(ステータスは、参考値です)

が、私はこのような結果が必要です。

bid  accept rejected noResp 
----------------------------------- 
1  1   0   0 
2  1   2   0 
3  1   1   0 

私は試したstackoverflowから多くのサンプルを得ましたMAX()SUM()CASEでも動作させることができませんでした。あなたは状況にピボットされているので

ので、私はそれがGROUP BYリストに表示されてはならないことを提案し、...

+0

入札= 1の場合、rejected = 0をどのように受け取るかは、ロジックに問題はありませんか? – igr

+0

これは、データベースエントリから抽出された人数を拒否した人数に基づくカウントです。 – Malar

答えて

3

を提案してください。代わりに、req_idを集計し、現在のCASE式にMAX()を使用してください。

select 
    req_id as bid, 
    max(case when status = 1 then 1 else 0 end) as accept, 
    max(case when status = 2 then 1 else 0 end) as rejected, 
    max(case when status = 3 then 1 else 0 end) as noResp 
from temp_allo 
group by req_id 
+0

ありがとうございました! – Malar

関連する問題