我有一个包含列代码和另一个折扣的表格如下:
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到每个层,并删除空值)来完成它。
但是想知道是否有更直接/有效的方式...
感谢您的帮助!
答案 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