【发布时间】:2017-12-20 08:35:00
【问题描述】:
我有一个如下所示的sql-server 2012 表:
lvl | keywords
-----|------------
A | null
A1 | null
A1.1 | red, green
A1.2 | blue
A1.3 | orange, yellow
A2 | null
A2.1 | brown
A2.2 | black, purple
B | null
B1 | null
B1.1 | pink
B1.2 | velvet, orange
B2 | null
B2.1 | cyan
B2.2 | purple, white
etc.
我需要一个将关键字汇总到更高级别的视图。所以顶级 A 必须具有列 lvl 以 A 开头的底层记录中的所有关键字。级别 A1 应具有列 lvl 以 A1 开头的记录中的所有关键字,等等。因此该视图的输出应如下所示:
lvl | keywords
-----|------------
A | red, green, blue, orange, yellow, brown, black, purple
A1 | red, green, blue, orange, yellow
A1.1 | red, green
A1.2 | blue
A1.3 | orange, yellow
A2 | brown, black, purple
A2.1 | brown
A2.2 | black, purple
B | pink, velvet, orange, cyan, purple, white
B1 | pink, velvet, orange
B1.1 | pink
B1.2 | velvet, orange
B2 | cyan, purple, white
B2.1 | cyan
B2.2 | purple, white
etc.
如何在T-SQL 中做到这一点? (sql-server 2012)
【问题讨论】:
-
你需要大量的字符串处理来完成这个。如果您可以重新设计表格,请为每个级别设置列。因此,您的表格将具有 - Level1、Level2、Level3、Keywords 作为列。选择时,执行 3 个查询的联合 - 每个查询都在每个级别分组关键字。合并结果并在删除重复项后进行最终选择。
标签: sql sql-server-2012 hierarchical-data rollup