【问题标题】:Query to Generate New Column for Parent Each Level查询为每个级别的父级生成新列
【发布时间】:2021-08-04 04:58:43
【问题描述】:

我有一个包含分层数据的简单表:

+----+----------+--------+-------+
| id | name     | parent | level |
+----+----------+--------+-------+
| 1  | province | Null   | 1     |
+----+----------+--------+-------+
| 2  | city     | 1      | 2     |
+----+----------+--------+-------+
| 3  | fire     | 2      | 3     |
+----+----------+--------+-------+
| 4  | ems      | 2      | 3     |
+----+----------+--------+-------+

我正在尝试构建一个递归查询来为每个级别添加一个新列。像这样:

+----+----------+---------+---------+
| id | level_1  | level_2 | level_3 |
+----+----------+---------+---------+
| 1  | Province | Null    | Null    |
+----+----------+---------+---------+
| 2  | Province | City    | Null    |
+----+----------+---------+---------+
| 3  | Province | City    | Fire    |
+----+----------+---------+---------+
| 4  | Province | City    | EMS     |
+----+----------+---------+---------+

我不知道如何解决这个问题,我对 CTE 查询不是很好。有什么建议吗?

【问题讨论】:

    标签: sql sql-server tsql common-table-expression


    【解决方案1】:

    嗯,这很复杂。我正在考虑将union all 与每个级别的单独查询一起使用:

    select t1.id, t1.name as level_1, null as level_2, null as level_3
    from t t1 
    where level = 1
    union all
    select t2.id, t1.name, t2.name, null
    from t t1 join
         t t2
         on t2.parent = t1.id
    where t2.level = 2
    union all
    select t3.id, t1.name, t2.name, t3.name
    from t t1 join
         t t2
         on t2.parent = t1.id join
         t t3
         on t3.parent = t2.id
    where t3.level = 3;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2015-08-10
      相关资源
      最近更新 更多