2011-02-10 5 views
0

2 개의 테이블에서 데이터를 가져 와서 피벗 형태로 데이터를 출력해야합니다. 데이터에는 3 가지 유형의 헤드 수, 실제, 계획 및 보류가 있으며 인원 수는 해당 월과 함께 피벗됩니다. 이제 부분적인 해결책을 얻을 수 있습니다. 다음은 실제 인원수에 대한 데이터를 가져 오는 코드입니다.T-SQL 및 SSRS 그룹화 및 계산

SELECT 

' Actual' HC_TYPE, p.[Owner], h1.ProjectID, p.ProjectName, h1.Center, 
substring(convert(varchar,h1.Period,120),1,7) Period, 
(Case when (substring(h1.ID,1,3) <> 'TBD') then count(*) else '0' end) HC 

FROM HC_PLAN_EXPANDED h1, PROJECTS p 

WHERE p.Status = 'Active' 

AND h1.ProjectID = p.ProjectID   

GROUP BY p.Owner, h1.ProjectID, h1.Center, p.ProjectName, 
substring(convert(varchar,h1.Period,120),1,7), h1.ID 

나는 h1.ID별로 그룹을 사용하지 않아도되지만 상황 조건에서 h1.ID를 사용할 수 있어야합니다.

+1

문제에 대한 설명에 "긴급"을 추가하면 커뮤니티를 귀찮게하고 질문을 무시하게 만듭니다. 귀하의 질문은 다른 누구보다 더 긴급하지 않습니다. – Gerrat

+0

'긴급'제거 ... – MartW

+0

나는 그것에 대해 미안하다. 그러나 나의 상황은 그것을 요구했다. .. 건배 – Avinash

답변

0

이것은 내가 무슨 짓을 ..

SELECT a.ProjectID, 센터, ID, 기간, [출처], p.ProjectName, p.Owner, COUNT (1) AS HC 서브 스트링 때 CASE (ID를 1,3) <> 'TBD'다음 프로젝트 P,691 조인 HC_PLAN_EXPANDED FROM

 CASE 
    WHEN substring(ID,1,3) = 'TBD' THEN COUNT(1) 
    ELSE 0 
    END AS HC_TYPEp 

을 HC_TYPEA AS (1) ELSE END 카운트 a.ProjectID = p.ProjectID ONWHERE a.ProjectID, 센터 p.Status IN '2011-01-01'사이 및 기간 ('ACTIVE')와 '2011-12-01'

GROUP , ID, 기간, [출처], p.ProjectID, p.ProjectName, p. [소유자]

보고서 작성자의 3 가지 유형의 인원수를 그룹화했습니다. 실제로 많이 묻는 질문과 많이 다릅니다. ..하지만 내 목적에 부합했습니다 .. 당신의 모든 지원에 감사드립니다.

0

아마도이 당신을 위해 작동합니다

SELECT 

' Actual' HC_TYPE, p.[Owner], h1.ProjectID, p.ProjectName, h1.Center, 
substring(convert(varchar,h1.Period,120),1,7) Period, 
(Select Case when (substring(h1.ID,1,3) <> 'TBD') then count(*) else '0' end from h1) HC 

FROM HC_PLAN_EXPANDED h1, PROJECTS p 

WHERE p.Status = 'Active' 

AND h1.ProjectID = p.ProjectID   

GROUP BY p.Owner, h1.ProjectID, h1.Center, p.ProjectName, 
substring(convert(varchar,h1.Period,120),1,7), h1.ID 
+0

나는 그것을 시도했지만 동일한 출력을했다. ID로 그룹화 할 때 동일한 ID를 가진 레코드의 수를 계산할 수 없습니다. 대신 레코드를 분할하고 각 레코드에 대해 1을 계산합니다 .. 나는 의미를 갖기를 희망합니다 .. – Avinash

+0

바보, 원래 쿼리에서 동일한 그룹화를 남겼습니다 :) h1.ID로 그룹화 한이 쿼리를 시도 했습니까? –

+0

예 .. 제가 한 .. .. 작동하지 않습니다 .. 나는 diff 접근 방식을 취했습니다 .. 나는 해결책을 찾았습니다 .. 당신의 도움에 많은 감사드립니다 :) – Avinash

0

을 당신이 이미 해결책을 발견 한 말을하더라도, 당신은 여전히이 좀보고 할 수 있습니다. 그냥 케이스에. :)

SELECT 

' Actual' HC_TYPE, p.[Owner], h1.ProjectID, p.ProjectName, h1.Center, 
substring(convert(varchar,h1.Period,120),1,7) Period, 

count(Case substring(h1.ID,1,3) when 'TBD' then null else 1 end) HC /* <-- */ 
/* alternatively, and closer to your structuring too: 
count(Case when substring(h1.ID,1,3) <> 'TBD' then 1 end) HC 
*/ 

FROM HC_PLAN_EXPANDED h1, PROJECTS p 

WHERE p.Status = 'Active' 

AND h1.ProjectID = p.ProjectID   

GROUP BY p.Owner, h1.ProjectID, h1.Center, p.ProjectName, 
substring(convert(varchar,h1.Period,120),1,7) 
+0

이것은 유망 해 보입니다 ... 시도해 보겠습니다. – Avinash