我想使用这个简单的表在SSRS中创建分层报告吗?你能帮帮我吗?我遵循这里的教程:https://www.mssqltips.com/sqlservertip/1939/working-with-a-parent-child-hierarchy-in-sql-server-reporting-services-ssrs/
但是我不知道EmployeeKey和ParentEmployeeKey是如何应用到我的桌子上的。就我的表而言,Col2是雇员,Col1是父级。但是在SSRS中,当我按Col2分组时,递归父级是COL1,我没有得到想要的结果。
这是我的桌子:
╔══════════════╦══════════════╗
║ COL1 ║ COL2 ║
╠══════════════╬══════════════╣
║ TEST01 ║ TEST02 ║
║ TEST01 ║ TEST03 ║
║ TEST01 ║ TEST04 ║
║ TEST02 ║ LAB ║
║ TEST02 ║ STL40 ║
║ TEST03 ║ LABSTL ║
║ TEST03 ║ STLSCH40 ║
║ TEST04 ║ LABSTL ║
║ TEST04 ║ FLG41 ║
║ TEST04 ║ STLSCH40 ║
╚══════════════╩══════════════╝
这就是我想要使用SSRS的结果。就像图片的缩进风格..。
╔═══════════════╦══╗
║ COL1 ║ ║
╠═══════════════╬══╣
║ TEST01 ║ ║
║ -TEST02 ║ ║
║ ----LAB ║ ║
║ ----STL40 ║ ║
║ -TEST03 ║ ║
║ ----LABSTL ║ ║
║ ----STLSCH40 ║ ║
║ -TEST04 ║ ║
║ ----LABSTL ║ ║
║ ----FLG41 ║ ║
║ ----STLSCH40 ║ ║
╚═══════════════╩══╝
我不知道上面的缩进式效果如何。我需要使用HierarchyID和IsDescendantOf还是递归CTE。这是我所做的递归CTE及其下的结果。
Declare @Col1 varchar(30)='TEST01';
Declare @BomLevel Integer=0;
WITH tBOM
AS
(
select a.Col1 , a.Col2, @BomLevel "BOMLevel" from Component A
WHERE Col1= @Col1
UNION ALL
Select c.Col1, c.Col2, BomLevel+1 From Component C
INNER JOIN tBOM on tBOM.Col2=c.Col1
)
select Col1,Col2 ,BOMLevel from tbom
Col1 Col2 BOMLevel
TEST01 TEST02 0
TEST01 TEST03 0
TEST01 TEST04 0
TEST02 STL40 1
TEST02 LAB 1
TEST03 STLSCH40 1
TEST03 LABSTL 1
TEST04 STLSCH40 1
TEST04 FLG41 1
TEST04 LABSTL 1
发布于 2016-01-20 04:10:04
这应该适用于任何深度(假设您没有通过SORT_PATH的VARCHAR(50) )。在执行层次结构时,您可以构建一个可以根据其进行排序的字符串(SORT_PATH)。最后,我们可以将REPLICATE()
与BOMLevel一起用于缩进某物(在本例中为连字符)。
SET NOCOUNT ON;
DECLARE @Component AS TABLE (
COL1 VARCHAR(50) ,
COL2 VARCHAR(50)
);
INSERT INTO @Component
( COL1, COL2 )
VALUES ( NULL, 'TEST01' ), -- ADDED
( 'TEST01', 'TEST02' ),
( 'TEST01', 'TEST03' ),
( 'TEST01', 'TEST04' ),
( 'TEST02', 'LAB' ),
( 'TEST02', 'STL40' ),
( 'TEST03', 'LABSTL' ),
( 'TEST03', 'STLSCH40' ),
( 'TEST04', 'LABSTL' ),
( 'TEST04', 'FLG41' ),
( 'TEST04', 'STLSCH40' )
;
WITH tBOM
AS ( SELECT A.COL1 , -- PARENT
A.COL2 , -- CURRENT
0 AS "BOMLevel",
CAST(A.COL2 AS VARCHAR(50)) AS SORT_PATH
FROM @Component A
WHERE A.COL1 IS NULL
UNION ALL
SELECT C.COL1 ,
C.COL2 ,
BOMLevel + 1,
CAST(SORT_PATH + '.' + C.COL2 AS VARCHAR(50)) AS SORT_PATH
FROM @Component C
INNER JOIN tBOM ON tBOM.COL2 = C.COL1
)
SELECT COL1 ,
COL2 ,
BOMLevel,
SORT_PATH,
REPLICATE('-', tBOM.BOMLevel) + COL2 AS DISPLAY_PATH
FROM tBOM
ORDER BY SORT_PATH
https://stackoverflow.com/questions/34889523
复制相似问题