2011-02-10 3 views
0

Мне нужно взять данные из 2 таблиц и вывести данные в форме Pivot. данные имеют 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

Это то, что я сделал ..

ВЫБРАТЬ a.ProjectID, Центр, ID, Период, [Источник], p.ProjectName, p.Owner, COUNT (1) AS HC , ПРИМЕР ПРИ подстроку (ID, 1,3) <> 'ТБД' ТОГДА рассчитывать (1) ELSE 0 END AS HC_TYPEA,

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

ИЗ HC_PLAN_EXPANDED объединение ПРОЕКТЫ р ПО a.ProjectID = p.ProjectID ГДЕ p.Status В ('ACTIVE') и период между '2011-01-01' и '2011-12-01'

GROUP BY a.ProjectID, Центр , ID, Period, [Source], p.ProjectID, p.ProjectName, p. [Owner]

Я сгруппировал 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, я не могу получить количество записей с одинаковыми идентификаторами .. вместо этого он разбивает записи и показывает количество отсчетов как 1 для каждой записи. Надеюсь, я понимаю. – Avinash

+0

Глупый я, Я оставил те же группировки из исходного запроса :) Пробовал ли вы этот запрос без группировки по h1.ID? –

+0

да .. я сделал .. не работает .. BTW я взял подход с разницей. Я нашел решение .. большое спасибо за вашу помощь :) – 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

Смежные вопросы