sql - SQLite 如何在一个表中使用自引用设置连接以创建多列
问题描述
我对 SQL 非常陌生。
我有一个如下所示的 SQLite 表:
CREATE TABLE DIM_Geography
(
ID int NOT NULL,
ParentID int NULL,
[Type] nvarchar(50) NULL,
Name nvarchar(150) NULL
)
其中的数据如下所示:
id ParentID Type Name
------+----------+-----+-----+
1| 200 |town |townN|
200| 3000 |area |areaN|
3000| 40000 |prov |provN|
40000| |dutc |dutcN|
因此,parentID 的数量越高,排名越高,最高的总是其 parentID 为NULL,id 的数量越少,排名越低
我想得到一个排序的连接视图,如:
Name1|Type1|Name2|Type2|Name3|Type3|Name4|Type4
dutcN|dutc |provN|prov |areaN|area |townN|town
有时第三或第四列或除第一列和最后一列之外的任何列都丢失了,我想复制丢失的列中的最低排名。所以它看起来像:
Name1|Type1|Name2|Type2|Name3|Type3|Name4|Type4
dutcN|dutc |townN|town |townN|town |townN|town
到目前为止,我根本没有想出任何解决方案,因为我真的不擅长 sqlite,除了:
SELECT
n1.Name AS 'Name1',
t1.Type AS 'Type1'
FROM
DIM_Geography n1
LEFT JOIN
DIM_Geography t1 ON n1.ParentID = t1.ID
ORDER BY Type1
唯一的作用是 dutcN 的顺序层次结构在顶部,因为它没有任何 parentID
解决方案
如果我理解正确,你想要一堆left join
s coalesce()
:
select g1.name, g1.type,
coalesce(g2.name, g1.name), coalesce(g2.type, t1.type),
coalesce(g3.name, g2.name, g1.name), coalesce(g3.type g2.type, t1.type),
coalesce(g4.name, g3.name, g2.name, g1.name), coalesce(g4.name, g3.type g2.type, t1.type),
from DIM_Geography g1 left join
DIM_Geography g2
on g2.id = g1.parentid left join
DIM_Geography g3
on g3.id = g2.parentid left join
DIM_Geography g4
on g4.id = g3.parentid
where g1.type = 'dutc'
推荐阅读
- azure - 用于审核 VM 磁盘信息的 PowerShell 脚本
- ios - 从左到右更改导航标题位置
- apache-spark - spark-submit中如何添加-Ddb2.jcc.charsetDecoderEncoder=3以及如何确保这些属性是否在driver中设置
- java - 通过将其与旧值进行比较来拦截 DB 中的字段是否已使用 JAVA 更改
- c# - Microsoft.SqlServer.Types 程序集导致地理数据类型出现问题。怎么修?
- javascript - 如何结合使用 PHP 和 Javascript 在会话中存储价值?
- angular - 使用 InAppBrowser 获取当前 URL
- mongodb - 如何更新嵌套数组对象mongodb
- vue.js - 在组件中定义子路由
- python - Python Turtle setworldcoordinates 负值