SQL Server:基于父子关系拆分列

SQL Server:基于父子关系拆分列,sql,sql-server,hierarchical-data,Sql,Sql Server,Hierarchical Data,该表在两列之间具有父子关系,如下所示: 我想将ID列拆分为3个不同的列,如下所示: 基本上,0作为ParentID的那一个将在Cat1中Cat2通过ParentID链接到Cat1,同样地Cat3链接到Cat2 如果有人有办法解决这个问题,你能分享你的想法吗?这是一个简单的查询。实际上,您已经完美地描述了查询应该做什么 让我们一步一步来: 基本上,将0作为ParentID的将在Cat1中 因此,第一步是获取Cat1值: SELECT Cat1.id FROM tablename AS Cat1

该表在两列之间具有父子关系,如下所示:

我想将ID列拆分为3个不同的列,如下所示:

基本上,
0
作为
ParentID
的那一个将在
Cat1
Cat2
通过
ParentID
链接到
Cat1
,同样地
Cat3
链接到
Cat2


如果有人有办法解决这个问题,你能分享你的想法吗?

这是一个简单的查询。实际上,您已经完美地描述了查询应该做什么

让我们一步一步来:

基本上,将0作为ParentID的将在Cat1中

因此,第一步是获取
Cat1
值:

SELECT Cat1.id FROM tablename AS Cat1
WHERE Cat1.ParentID = 0
Cat2通过父ID与Cat1链接

这是一个
连接
LEFT JOIN
,具体来说,这是因为如果没有具有这样的
ParentID
的行,那么显然您希望在这些列中获取具有
null
值的行:

SELECT Cat1.id, Cat2.id FROM tablename AS Cat1
LEFT JOIN tablename AS Cat2 ON Cat2.ParentID = Cat1.id
WHERE Cat1.ParentID = 0
类似地,Cat3链接到Cat2

现在,我们对Cat3执行相同的操作:

SELECT Cat1.id, Cat2.id, Cat3.id FROM tablename AS Cat1
LEFT JOIN tablename AS Cat2 ON Cat2.ParentID = Cat1.id
LEFT JOIN tablename AS Cat3 ON Cat3.ParentID = Cat2.id
WHERE Cat1.ParentID = 0

您使用的是哪种DBMS?它是SQL。更新了标题。SQL是一种语言。。。DB是您运行SQL代码的地方…这是一个基本的双左连接。您自己尝试过一些查询吗?每个RDBMS都使用不同的SQL方言,@Pradeep。例如,SQL Server使用T-SQL,Oracle使用PL\SQL等。它们都不遵循所有(或相同)ISO规则,并且对于相同的行为,它们都具有不同的函数/语法。说明您正在使用“sql”而不告诉我们RDBMS意味着志愿者无法在不猜测您正在使用的RDBMS的情况下给出答案,然后您可能会得到与您正在使用的RDBMS不起作用的答案。