【问题标题】:Convert List of Categories into Category Tree Table SQL将类别列表转换为类别树表 SQL
【发布时间】:2017-08-19 13:22:26
【问题描述】:

我有一张如下所示的表格:

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。

Actual list of CatIDs in excel

【问题讨论】:

  • 你的数据结构没有意义。为什么层次结构不是 7 --> 2 --> 1 ? 7 --> 6 --> 5 是从哪里来的?

标签: sql sql-server tree categories


【解决方案1】:

我想我明白了。您可以使用条件聚合来做到这一点:

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;

这是rextester

【讨论】:

  • 谢谢戈登!确实,使用我在示例中提供的数据集,它可以工作。我应该首先说明 CatID 的列表很长。我很抱歉。
  • @Maciej 。 . .我看不出catid 值的数量与这个问题的答案有什么关系。
  • 基本上 CatID 是唯一 ID 的列表,而 ParentID 是其直系父母的 ID。列表如此之长的事实让我很难做到……对我来说:/
  • @Gordon ParentID 并不总是在 0 到 7 的范围内。每个 ID 都可以是(并且通常是)父级。
  • @Maciej 。 . .我建议你问另一个问题。这似乎回答了您在这里提出的问题。你应该很清楚你想在另一个问题中做什么。
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 2021-07-24
  • 2012-10-31
  • 2023-01-10
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多