我必须从2个表中获取数据并以数据透视表的形式输出数据。数据有3种类型的人头数,实际数,计划数和待定数,人数以月数为单位。现在我能够获得部分解决方案。以下是我获取实际人数数据的代码。
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。
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分:0)
这就是我所做的..
选择a.ProjectID,中心,ID, 期间,[来源],p.ProjectName,p.Owner,COUNT(1)AS HC, 案件 当子串(ID,1,3)&lt;&gt; 'TBD'那么算(1) ELSE 0 结束为HC_TYPEA,
CASE
WHEN substring(ID,1,3) = 'TBD' THEN COUNT(1)
ELSE 0
END AS HC_TYPEp
FROM HC_PLAN_EXPANDED一个加入项目p ON a.ProjectID = p.ProjectID 在哪里p.Status IN('ACTIVE') 和“2011-01-01”和“2011-12-01”之间的时间段
GROUP BY a.ProjectID,Center,ID,Period,[Source],p.ProjectID,p.ProjectName,p。[Owner]
我在报告构建器上对3种类型的人数进行了分组。我知道它与我实际要求的有很多不同......但它符合我的目的..谢谢大家的支持..