sql - 如何知道区域表中的父区域级别名称?

标签 sql tsql

我创建了这张表

CREATE TABLE Region
(
  RegionID INT PRIMARY KEY ,
  ParentRegionID INT FOREIGN KEY REFERENCES dbo.Region,
  RegionName NVARCHAR(30)
);

我插入一些这样的值:
    INSERT  INTO dbo.Region
        ( RegionID, ParentRegionID, RegionName )
VALUES  ( 1, NULL, N'USA' ),
        ( 2, 1, N'California' ),
        ( 3, 2, N'Los Angeles' ),
        ( 4, 2, N'California City' ),
        ( 5, 2, N'San Diego' ),
        ( 6, 2, N'Bakersfield' ),
        ( 7, 1, N'Alaska' ),
        ( 8, 7, N'Wrangell' ),
        ( 9, 7, N'Anchorage' ),
        ( 10, 7, N'Juneau' );

我希望我的查询返回

ParentRegionID RegionID RegionName RegionLevelName
NULL           1            USA            Country
1              2            California     State
1              7            Alaska         State
7              8            Wrangell       City
7              9            Anchorage      City
7             10            Juneau         City
2              3            Los Angeles    City
2              4            CaliforniaCity City
2              5            San Diego      City
2              6            Bakersfield    City

最佳答案

试试这个代码

WITH    RegionTree ( ParentRegionID, RegionID, RegionName, RegionLevel )
      AS (
           SELECT   ParentRegionID ,
                    RegionID ,
                    RegionName ,
                    0 AS RegionLevel
           FROM     Region
           WHERE    ParentRegionID IS NULL
           UNION ALL
           SELECT   c.ParentRegionID ,
                    c.RegionID ,
                    c.RegionName ,
                    p.RegionLevel + 1
           FROM     Region c
                    INNER JOIN RegionTree p ON c.ParentRegionID = p.RegionID
         )
SELECT  ParentRegionID ,
        RegionID ,
        RegionName ,
        CASE WHEN RegionLevel = 0 THEN 'Country'
             WHEN RegionLevel = 1 THEN 'State'
             WHEN RegionLevel = 2 THEN 'City'
        END AS RegionLevelName
FROM    RegionTree;

关于sql - 如何知道区域表中的父区域级别名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41157024/

相关文章:

sql - TSQL 不会导致无限循环

mysql - 中值计算从 MySQL 到 SQL Server 的转换

sql-server - 在线模式修改

mysql:复制数据或 LIKE 子句

mysql - MySql 查询中的多个 Order By

sql - 使用 IF NOT EXISTS 生成插入脚本

mysql - 如何设置SQL默认值等于主键

sql-server - 如何在 SQL Server 中列出特定数据库的所有对象

sql - T-SQL : How to select one column or in alternative another one?

sql - 分配组 ID