2013-02-21 2 views
0

임을 기준으로이 합계를 계산하려고 시도했지만 다음 코드를 사용할 때 분명히 내 그룹에 일주일을 넣어야합니다. 즉 출력에 매주 한 코드가 있음을 의미합니다. 수많은. 하여 그룹에서 주를 사용하지 수있는 방법이 있나요처럼 지금은 보이는대로그룹에서 필드 사용하지 않기

cde channel 201305 201306 201307 
rr1  2  0   0.6  1 

어디처럼 그렇게 보인다 :

cde channel 201305 201306 201307 
rr1  2  0  null  null 
rr1  2  null 0.6  null 
rr1  2  null null  1 

이 내 코드입니다

select cde, 
case when week = '201305' then CAST((SUM(fin_acc_sum))AS FLOAT)/nullif(SUM(total),0) end as [201305], 
case when week = '201306' then CAST((SUM(fin_acc_sum))AS FLOAT)/nullif(SUM(total),0) end as [201306], 
case when week = '201307' then CAST((SUM(fin_acc_sum))AS FLOAT)/nullif(SUM(total),0) end as [201307], 
channel 
into #base2 
from #acc_ref 
group by cde,channel,week 
order by channel,cde,week 

답변

1

간단히 추가 MAX를 각 CASE 표현식에 적용하고 GROUP BY에서 주를 제거하십시오.

... 
MAX 
(case when week = '201305' then CAST((SUM(fin_acc_sum))AS FLOAT)/nullif(SUM(total),0) end 
) as [201305], 
... 
group by cde,channel 
order by cde,channel 

행을 열로 효과적으로 피벗하므로 week은 GROUP BY에서 의미가 없습니다

+0

감사합니다. 나는 '집합 또는 하위 쿼리가 포함 된 식에서 집계 함수를 수행 할 수 없습니다.'라는 메시지가 표시됩니다. – user1296762

+0

@ user1296762 : SUM을 CAST 외부로 이동하십시오. – gbn

관련 문제