2011-12-22 2 views
-2

가능한 중복은 :
dynamic sql pivot in sql serverPIVOT 출력 상 2008

어떻게

SELECT COUNT(Rly) AS TheCount, Rly FROM SPAD 

WHERE Rly IN ('CR', 'ER', 'ECR', 'ECoR', 'NR', 'NCR', 'SR', 'SCR', 'SER', 'SECR', 'WR', 'WCR', 'Kolkata') 


GROUP BY Rly 
+0

rly의 각 값에 대해 피벗하고 해당 값으로 숫자를 표시하고 싶습니까? 당신이 열거 한 것보다 더 많은 가치를 가질 수 있을까요? – xQbert

+0

우리가 추측 할 필요가 없도록 원하는 결과에 대한 자세한 내용이 필요합니다. 너 혼자 시험해 봤니? 많은 PIVOT 예제가 있습니다 [BOL] (http://msdn.microsoft.com/en-us/library/ms177410.aspx) –

+0

예, Rly가 더 많을 수 있습니다. – Sunil

답변

1

이는 것으로 가정 PIVOT 출력이 저장 프로 시저를 변경하려면 rlys 값의 유한 수를 가짐; 현재이를 달성하는 유일한 방법은 값이 더 많은 경우 동적 SQL을 사용하는 것입니다.

Select 
sum(case when rly = 'CR' then 1 else 0 end) as "CR", 
sum(case when rly = 'ER' then 1 else 0 end) as "ER", 
sum(case when rly = 'ECR' then 1 else 0 end) as "ECR", 
sum(case when rly = 'ECoR' then 1 else 0 end) as "ECoR", 
sum(case when rly = 'NR' then 1 else 0 end) as "NR", 
sum(case when rly = 'NCR' then 1 else 0 end) as "NCR", 
sum(case when rly = 'SR' then 1 else 0 end) as "SR", 
sum(case when rly = 'SCR' then 1 else 0 end) as "SCR", 
sum(case when rly = 'SER' then 1 else 0 end) as "SER", 
sum(case when rly = 'SECR' then 1 else 0 end) as "SECR", 
sum(case when rly = 'WR' then 1 else 0 end) as "WR", 
sum(case when rly = 'WCR' then 1 else 0 end) as "WCR", 
sum(case when rly = 'Kolkata' then 1 else 0 end) as "Kolkata" 
FROM SPAD 

이 합계 ​​개수로부터 변경 수락 편집 된 후 (link 검색).

+0

선생님, 두 가지 해결책 모두 작동하지만 총계는 없습니다. CR 38, ER 38, ECR 38와 같은 Rly의 밑에 Rly의 이름을 적어주세요. 도와주세요. – Sunil

+0

고맙습니다. 솔루션은 count 대신 SUM을 사용하여 원하는대로 작동합니다. – Sunil

+0

rly에 MORE 또는 값이 있으면이 기능이 작동하지 않습니다. 이 경우에는 DYNAMIC SQL 만 도움이 될 것입니다. – xQbert