将类别列表转换为类别树表SQL
我有一张这样的桌子:将类别列表转换为类别树表SQL,sql,sql-server,tree,categories,Sql,Sql Server,Tree,Categories,我有一张这样的桌子: CatID ParentID 1 0 2 1 3 2 4 3 5 0 6 1 7 2 这就是我想要达到的结果: Cat0 Cat1 Cat2 Cat3 Cat4 Cat5 Cat6 Cat7 1 2 3 4 5 6 7 我该怎么做?我考虑过创建一个临时表,但不知道如何用所需格式的数据填充它 有人能帮忙吗 带
CatID ParentID
1 0
2 1
3 2
4 3
5 0
6 1
7 2
这就是我想要达到的结果:
Cat0 Cat1 Cat2 Cat3 Cat4 Cat5 Cat6 Cat7
1 2 3 4
5 6 7
我该怎么做?我考虑过创建一个临时表,但不知道如何用所需格式的数据填充它
有人能帮忙吗
带有CATID的表格非常长-共有54K个独特的CATID。
我想我明白了。您可以使用条件聚合执行此操作:
select max(case when parentid = 0 then catid end) as cat0,
max(case when parentid = 1 then catid end) as cat1,
max(case when parentid = 2 then catid end) as cat2,
. . .
from (select t.*,
row_number() over (partition by parentid order by catid) as seqnum
from t
) t
group by seqnum;
这里有一个问题。您的数据结构毫无意义。为什么层次结构不是7-->2-->1?7-->6-->5从何而来?谢谢戈登!事实上,对于我在示例中提供的数据集,它是有效的。首先我应该说CATID的列表很长。我的道歉。@Maciej。我看不出
catid
值的数量与这个问题的答案有什么关系。基本上,catid是唯一ID的列表,ParentID是它们的直系父ID。名单很长,这一事实使它很难做到。。对我来说,就是:/@Gordon父ID并不总是在0到7之间。每个ID可以是(通常是)父ID。@Maciej。我建议你再问一个问题。这似乎回答了你在这里提出的问题。在另一个问题中,你应该非常清楚你想做什么。