扁平化客户层次结构

时间:2015-03-24 18:42:49

标签: sql ms-access

我有一个包含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

1 个答案:

答案 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,但是,如果您打算保留旧表。