Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为父/子关系创建平面结构_Sql_Tsql - Fatal编程技术网

Sql 为父/子关系创建平面结构

Sql 为父/子关系创建平面结构,sql,tsql,Sql,Tsql,我有一个父/子关系表,高达上面定义的10个级别,需要按照下面的屏幕截图输出,该屏幕截图将是一个平面结构 下面是创建表和插入示例数据的代码 CREATE TABLE dbo.CCTemp ( ID INT IDENTITY(1,1), CCName VARCHAR(100), [Level] INT, ParentID INT ) INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('Services Total - 2018',1,N

我有一个父/子关系表,高达上面定义的10个级别,需要按照下面的屏幕截图输出,该屏幕截图将是一个平面结构

下面是创建表和插入示例数据的代码

CREATE TABLE dbo.CCTemp
(
ID INT IDENTITY(1,1),
CCName VARCHAR(100),
[Level] INT,
ParentID INT
)

INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('Services Total - 2018',1,NULL)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9UKDT - UKD Expense Total',2,1)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9Q400 - UKD Indirects',3,2)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98064 - IT SDS Costs',4,3)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98063 - ACS in charges',4,3)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98012 - UKD - Central',4,3)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9Q300 - UKD Non Opex Total',3,2)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98024 - Commission',4,7)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98013 - Affiliates Commission',4,7)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9Q200 - Digital Functions Total',3,2)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9QB41 - Marketing',4,10)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('2018_9QB4F - UKD Marketing General Function',5,11)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98141 - Marketing Stratey, Planning and Supplier Management',6,12)
INSERT INTO DBO.CCTemp (CCName,Level,ParentID) values ('98031 - UKD Cost Challenge (RM)',6,12)

你可以做9个左连接,或者使用一个带枢轴的递归cte。嘿@JonathanWilson,我将尝试一下这个,最初我在级别列上创建了枢轴,但在将父级和子级从几行合并到一行时面临挑战。请解释第二个结果,好吗。这里显示的内容还不太清楚。我想请您感谢20多年的经验,这些经验可以帮助您避免浪费您的时间和精力,也可能不会浪费团队成员的时间。我想帮你避免犯我以前见过的错误。我试图帮助你解决真正的需要,而不是感知的方法。你是否选择放弃这个机会是你的选择,但我不会选择不给你这个机会。不提出这些问题是我的疏忽。嘿@MatBailie,我真的很感谢你花时间在这方面,并根据你的经验提出建议。你对整个问题如此反对,然后你去发布答案!九个左连接lol@JonathanWilson这就是问题的疯狂之处。我把它贴出来是想指出这一点。我并不反对任何事情,我试图问更多的问题,更深入地搜索,找到潜在的需求,更好地帮助OP。我想帮忙,我完全明白,我很感激。也就是说,你把这份报告描述为反模式是夸大其词,而你关于使用“100%cpu并填充磁盘”的评论则是草率的。如果有人不接受你的建议,就没有必要关灯:pHey@MatBailie,花了一秒钟的时间给出输出,这真的很接近,我期待着在这方面继续努力,并感谢你在这方面的努力。。再次感谢。@JonathanWilson我的一条评论似乎已经消失了。对于这是报告可视化的建议,我的回应是询问数据在哪里。很少有报告没有数据。如果它是一个模板,它是不可搜索的(如果你想从L5节点向下或向上报告,祝你好运),它没有可加入的ID,等等。这似乎是对真实需求的一种解释,缺少重要方面。我以前见过新的团队成员尝试过这个方法,它总是被扔掉,用一些参数化的搜索和汇总来代替。
SELECT
  L0.CCNAME,
  L1.CCNAME,
  L2.CCNAME,
  L3.CCNAME,
  L4.CCNAME,
  L5.CCNAME,
  L6.CCNAME,
  L7.CCNAME,
  L8.CCNAME,
  L9.CCNAME
FROM
            dbo.CCTemp AS L0
  LEFT JOIN dbo.CCTemp AS L1 ON L1.parentID = L0.id
  LEFT JOIN dbo.CCTemp AS L2 ON L2.parentID = L1.id
  LEFT JOIN dbo.CCTemp AS L3 ON L3.parentID = L2.id
  LEFT JOIN dbo.CCTemp AS L4 ON L4.parentID = L3.id
  LEFT JOIN dbo.CCTemp AS L5 ON L5.parentID = L4.id
  LEFT JOIN dbo.CCTemp AS L6 ON L6.parentID = L5.id
  LEFT JOIN dbo.CCTemp AS L7 ON L7.parentID = L6.id
  LEFT JOIN dbo.CCTemp AS L8 ON L8.parentID = L7.id
  LEFT JOIN dbo.CCTemp AS L9 ON L9.parentID = L8.id