【发布时间】:2014-12-16 16:18:23
【问题描述】:
我正在使用 SQL Server 2012 和 Report Builder 创建一个报告,该报告必须显示每个父元素的高、中和低级别的风险总数。
每个元素都包含一定数量的风险等级。我需要父元素的总数。总数将包括所有子元素的数量以及元素本身可能拥有的数量。
我在查询中使用 CTE - 我附加的代码不起作用(没有错误 - 它只是显示不正确的结果)并且我不确定我的逻辑是否正确?
希望有人可以提供帮助。提前致谢。
我的表结构是:
元素表
ElementTableId(PK) ElementName ElementParentId
风险表
RiskId(PK) 风险名称 RiskRating ElementId(FK)
我的查询:
WITH cte_Hierarchy(ElementId, ElementName, Generation, ParentElementId)
AS (SELECT ElementId,
NAME,
0,
ParentElementId
FROM Extract.Element AS FirtGeneration
WHERE ParentElementId IS NULL
UNION ALL
SELECT NextGeneration.ElementId,
NextGeneration.NAME,
Parent.Generation + 1,
Parent.ElementId
FROM Extract.Element AS NextGeneration
INNER JOIN cte_Hierarchy AS Parent
ON NextGeneration.ParentElementId = Parent.ElementId),
CTE_HighRisk
AS (SELECT r.ElementId,
Count(r.RiskId) AS HighRisk
FROM Extract.Risk r
WHERE r.RiskRating = 'High'
GROUP BY r.ElementId),
CTE_LowRisk
AS (SELECT r.ElementId,
Count(r.RiskId) AS LowRisk
FROM Extract.Risk r
WHERE r.RiskRating = 'Low'
GROUP BY r.ElementId),
CTE_MedRisk
AS (SELECT r.ElementId,
Count(r.RiskId) AS MedRisk
FROM Extract.Risk r
WHERE r.RiskRating = 'Medium'
GROUP BY r.ElementId)
SELECT rd.ElementId,
rd.ElementName,
rd.ParentElementId,
Generation,
HighRisk,
MedRisk,
LowRisk
FROM cte_Hierarchy rd
LEFT OUTER JOIN CTE_HighRisk h
ON rd.ElementId = h.ElementId
LEFT OUTER JOIN CTE_MedRisk m
ON rd.ElementId = m.ElementId
LEFT OUTER JOIN CTE_LowRisk l
ON rd.ElementId = l.ElementId
WHERE Generation = 1
编辑:
样本数据
ElementTableId(PK) -- ElementName -- ElementParentId
1 ------------------- Main --------------0
2 --------------------Element1-----------1
3 --------------------Element2 ----------1
4 --------------------SubElement1 -------2
RiskId(PK) RiskName RiskRating ElementId(FK)
a -------- Financial -- High ----- 2
b -------- HR --------- High ----- 3
c -------- Marketing -- Low ------- 2
d -------- Safety -----Medium ----- 4
样本输出:
Element Name High Medium Low
Main ---------- 2 ---- 1 -------1
【问题讨论】:
-
您说您拥有的代码不起作用是什么意思?你有错误吗?
-
@TabAlleman 查询显示不正确的结果 - 没有错误消息
-
它显示什么结果,和你想要的有什么不同?
-
@taballeman 它没有显示每个父母及其子女的总数。它只显示父级本身的总数 - 不包括所有子级结果
-
添加样本数据和所需的输出
标签: sql sql-server count parent-child hierarchy