2017-05-06 1 views
0

상태 및 ID를 기반으로 SQL Server 데이터베이스에서 행을 그룹화하고 개수를 표시해야하는 시나리오가 있습니다. 나는려고하지만 결과는SQL Server : 단일 행에 여러 행 값

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하지만 제대로 작동하지 못했습니다.

제안하십시오

..

+0

어떻게 입찰가 = 1에 대해 거부 = 0, 논리에 문제가 있습니까? – igr

+0

이것은 얼마나 많은 사람들이 데이터베이스 항목에서 추출한 것을 거부했는지에 따라 계산됩니다. – Malar

답변

3

하면 그러므로 나는 그것이 GROUP BY 목록에 표시되지 않도록 제안, 상태를 선회하고 있기 때문에. 대신 req_id에 대해 집계 한 다음 MAX()을 현재 CASE 개의 표현식과 함께 사용하십시오.

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

관련 문제