Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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_Sql Server_Tree_Categories - Fatal编程技术网

将类别列表转换为类别树表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。我建议你再问一个问题。这似乎回答了你在这里提出的问题。在另一个问题中,你应该非常清楚你想做什么。