【发布时间】:2016-07-19 03:14:30
【问题描述】:
我想就 MS Reporting Services 中的 SELECT 寻求帮助。我正在创建一个图表报告(列类型),其中列应该是花费在项目上的小时数(花费在父报告、其子项及其子项上的所有小时数的总和)。 这个概念是: 第一个报告是a column graph, where values are all hours spent on projects and their children by months (axis x) and series group is based on type of issue where hours were spent on。
第二份报告是我遇到的问题 - 深入了解月份应显示在 x 轴上主要父报告的名称以及在该报告及其所有子报告上花费的小时数列中。根据父母 ID 和月份,可以深入到第三个报告 - 所选父母报告第一级的所有孩子以及在他们及其孩子身上花费的时间总和。
The source tables are stuctured as on picture example,我在 SELECT 中使用 LEFT JOIN,因为可以有父母没有问题和时间,但我需要他们的孩子有一些(并且我显示父母的名字)。父 ID 仅适用于直接父而不是主要父(可以识别一个,父 ID 为 NULL)。没有等级标志可以识别,您的层次结构有多深。并且没有规定项目可以有多少级别。 对于第三级,我创建了一个 SELECT,它越来越深:
WITH hierarchy AS (SELECT id, parent_id, name
FROM dbo.projects AS p
WHERE (id = @id)
UNION ALL
SELECT p.id, p.parent_id, p.name
FROM dbo.projects AS p INNER JOIN hierarchy AS h ON p.parent_id = h.id)
SELECT @id AS pid, hierarchy_1.parent_id, hierarchy_1.id, hierarchy_1.name, i.tracker_id AS fronta_id, t.hours, t.spent_on, t.tmonth, f.name AS fronta
FROM hierarchy AS hierarchy_1 LEFT OUTER JOIN
dbo.issues AS i ON hierarchy_1.id = i.project_id
LEFT OUTER JOIN dbo.time_entries AS t ON i.id = t.issue_id INNER JOIN
dbo.trackers AS f ON i.tracker_id = f.id
WHERE (t.tmonth = @month)
我曾尝试将此用于第二次报告,但一切都失败了。我已经搜索了很多可能的解决方案,但不幸的是,我通常以在主要父母下分组时间结束。 我从最后一个孩子那里得到了一个建议,把所有时间加起来,然后走得更高。但最后我无法指定图表的主要父级。
非常感谢您的任何建议!
【问题讨论】:
标签: sql sql-server reporting-services recursive-query