我使用递归父功能制作了一份SSRS报告,以显示值的分层树。我遇到的问题是有些孩子有一个以上的父,但是因为(为了很好地使用递归父)我需要按Id分组结果,我只看到不同的条目。这意味着我只看到每个孩子一次,即使它"应该"出现在报告的多个位置(在每个父母的下面)。
这是一个显示我的意思的示例数据集:
DECLARE @Bear Table
( ParentId INT NOT NULL
,Id INT NOT NULL
,Name VARCHAR(255))
INSERT INTO @Bear
SELECT * FROM
(SELECT 0 AS ParentId, 1 AS Id, 'Daddy Bear' AS Name UNION
SELECT 0 AS ParentId, 2 AS Id, 'Mummy Bear' AS Name UNION
SELECT 1 AS ParentId, 3 AS Id, 'Baby Bear' AS Name UNION
SELECT 2 AS ParentId, 3 AS Id, 'Baby Bear' AS Name) AS FamilyMember
ORDER BY FamilyMember.Id
SELECT * FROM @Bear
我的实际数据包含很多" Baby Bears"例如,一个函数由多个过程使用,或者一个过程由多个报告使用。
当我编写报告时,我在Bear.Id上进行分组,使用Bear.ParentId的递归父级,它给出了类似这样的内容(在报告表中):
Level 1 Level 2
Daddy Bear
Baby Bear
Mummy Bear
正如你所看到的," Baby Bear"只出现一次(通常,Id将是唯一的,这将是完美的意义)。我希望SSRS能够显示的内容更像是:
Level 1 Level 2
Daddy Bear
Baby Bear
Mummy Bear
Baby Bear
这将使用户更好地了解他们正在考虑的实际结构。
到目前为止,我已尝试将报告组更改为" cstr(Fields!Id.Value)& cstr(Fields!ParentId.Value)",为了重新建立一个唯一的分组,这样就不会将任何记录聚合成隐形,但是这会丢失孩子在父母之后立即出现的顺序,所以我得到类似的东西这样:
Level 1 Level 2
Daddy Bear
Baby Bear
Baby Bear
Mummy Bear
我还尝试将ROW_NUMBER()OVER(ORDER BY Id,ParentId)添加为查询中的新列,然后对其进行分组,但SSRS似乎对此有问题。我现在使用的最终解决方法是仅列出第一个示例中的不同值,但在每个表行中使用Action可以在单击时为每个节点再次运行报表。然而,这远非理想。
我也没有结果用Google搜索。
我不知道该做什么。
非常感谢任何帮助 - 我该怎么办?
感谢您的时间,
标记
答案 0 :(得分:0)
为什么不准确添加ROW_NUMBER()?
SELECT ROW_NUMBER() over (order by parentid) as rn, * FROM
(SELECT 0 AS ParentId, 1 AS Id, 'Daddy Bear' AS Name UNION
SELECT 0 AS ParentId, 2 AS Id, 'Mummy Bear' AS Name UNION
SELECT 1 AS ParentId, 3 AS Id, 'Baby Bear' AS Name UNION
SELECT 2 AS ParentId, 3 AS Id, 'Baby Bear' AS Name) AS FamilyMember
制作一个独特的"用于分组的每行ID。
<强>更新强>
因此,基于我对您的问题的理解,您需要一个recursive CTE。这里有很多关于它们的问题,所以在这个和那个链接之间我鼓励你弄清楚如何生成一个符合你需要的数据集。