我有一个包含4个客户层次结构的表,每个层都在一列(4列)中。我想从这里生成一个表,在一列中包含来自4个层次结构列的所有唯一代码,另一列包含来自第一列的对应代码。
如下例所示:
来自:
Tier1 Tier2 Tier3 Tier4
--------------------------------
1230 1100 1000 1000
1230 1100 1001 1001
1002
1230 1100 1222 1003
1004
对此:
Unique Tier4
---------------
1000 1000
1001 1001
1002 1002
1003 1003
1222 1003
1100 1000
1100 1001
1100 1003
1230 1000
1230 1001
1230 1002
1004 1004
答案 0 :(得分:0)
很难准确说出你想要的东西,但我觉得这样的事情应该做:
SELECT Tier1, Tier4 FROM Table WHERE Tier1 IS NOT NULL
UNION
SELECT Tier2, Tier4 FROM Table WHERE Tier2 IS NOT NULL
UNION
SELECT Tier3, Tier4 FROM Table WHERE Tier3 IS NOT NULL
UNION
SELECT Tier4, Tier4 FROM Table WHERE Tier1 IS NULL AND Tier2 IS NULL AND Tier3 IS NULL
如果缺失的值不是NULL
,您当然需要修改代码。
编辑添加:请注意,如果该字段在层次结构中没有其他内容,那么上一个查询只会向结果中添加Tier4, Tier4
,因为这就是您对评论的措辞。不过,再看一下,我在结果中看到1003, 1003
。实际上,您可能希望SELECT Tier4, Tier4 FROM Table
作为查询的最后一行而不是我拥有的内容。
您可以使用以下内容将其插入现有表格中:
INSERT INTO ExistingTable (Field1, Field2)
SELECT Tier1, Tier4 FROM Table WHERE Tier1 IS NOT NULL
UNION
SELECT Tier2, Tier4 FROM Table WHERE Tier2 IS NOT NULL
UNION
SELECT Tier3, Tier4 FROM Table WHERE Tier3 IS NOT NULL
UNION
SELECT Tier4, Tier4 FROM Table WHERE Tier1 IS NULL AND Tier2 IS NULL AND Tier3 IS NULL
否则我会单独创建表格,然后插入。您可能只想要一个VIEW
。目前尚不清楚您使用此功能的原因。您可能希望将其创建为VIEW,但是,如果您打算保留旧表。