我有两个表 - 一个是事务表,另一个是查找表。这些表连接在两列上,其中一列总是有一个值,而另一列可能没有。
示例
transaction table
category | subcategory | marks
A | 01 | 10
A | 02 | 20
B | 03 | 30
B | 04 | 40
C | 05 | 50
lookup table
category | subcategory | cut-off
A | | 15
A | 01 | 25
B | 03 | 35
B | | 55
C | | 75
我希望通过加入transaction
和category
列来获得subcategory
表格中每个条目旁边的截止日期。对于subcategory
没有完全匹配的情况,需要选择与null
对应的记录。
所需的输出格式:
output format
category | subcategory | marks | cut-off
A | 01 | 10 | 25
A | 02 | 20 | 15
B | 03 | 30 | 35
B | 04 | 40 | 55
C | 05 | 50 | 75
我一直在尝试像下面的查询一样思考问题,当然问题是它不能按照我想要的方式工作,因为它没有正确处理空案例。
select t.category, t.subcategory, t.marks, l.cut-off
from transaction t
left outer join lookup l
on t.category = l.category
and t.subcategory = l.subcategory
我是否需要多个查询(例如分别处理union all
和null
的{{1}}?是否有可用于单个查询的选项?
答案 0 :(得分:0)
你可以这样做:
SELECT t.category, t.subcategory, t.marks, l.cut-off FROM transaction t left outer join lookup l on t.category = l.category and t.subcategory = ISNULL(l.subcategory, t.subcategory)
答案 1 :(得分:0)
使用子查询(用于oracle的NVL)
SELECT t.category,
t.subcategory,
t.marks,
NVL(
(SELECT l.cut_OFF from lookup l where l.category = t.category and l.subcategory = t.subcategory),
(SELECT l.cut_OFF from lookup l where l.category = t.category and l.subcategory is null))
FROM transaction t