扁平化客户层次结构

Flatten hierarchy of clients

我有一个 table 有 4 个客户端层次结构,每个层次结构在一列(4 列)中。我想从中生成一个 table,其中一列来自 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

很难准确地说出你想要什么,但我认为应该这样做:

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 作为查询的最后一行,而不是我所拥有的。


您可以将其插入到现有的 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

否则我会单独创建 table 然后插入。您也可能只想要一个 VIEW 。目前尚不清楚您将其用于什么目的。但是,如果您打算保留旧的 table.

,您可能希望将其创建为 VIEW