将1列与其他3列匹配

时间:2015-03-16 13:47:36

标签: sql ms-access

我有一个包含列代码和另一个折扣的表格如下:

Klient  |   discount
--------+-----------
123     |   10
232     |   5
322     |   7
451     |   2

在另一张桌子上,我的客户端代码级别如下:

Tier 1  |   Tier2   |   Tier3
--------+-----------+--------
023     |   123     |   333
232     |   311     |   455

我需要这样的东西(klient字段可以在任何层列中,所以必须检查它在哪里......)

Klient  |   discount    |   tier
--------+---------------+---------
123     |   10          |   2
232     |   5           |   1

我通过在同一个表上运行三个追加查询来改变关系字段(从klient到每个层,并删除空值)来完成它。

但是想知道是否有更直接/有效的方式...

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT Tier1 AS Klient, 1 AS Tier
FROM t2
UNION ALL SELECT Tier2, 2
FROM t2
UNION ALL SELECT Tier3, 3
FROM t2

这将为您提供以下内容:

Klient  |   Tier
--------+-------
023     |   1   
232     |   1   
123     |   2
311     |   2
333     |   3
455     |   3

如果您将此查询保存为q1,则可以加入第一个表:

SELECT Klient, Discount, Tier
FROM q1
INNER JOIN t1 ON q1.Kleint = t1.Klient

NB。您的表是否有任何特定原因为每个层都有一个单独的列?理想情况下,表的结构应该是union查询的结构,并且应该使用交叉表查询来完成逐列分析。

答案 1 :(得分:0)

使用此子查询来转换层:

(SELECT tier1 k, 1 t FROM tiers
UNION ALL
SELECT tier2 k, 2 t FROM tiers
UNION ALL
SELECT tier3 k, 3 t FROM tiers) my_tiers