1

我有两个表 - 一个是事务表,另一个是查找表。这些表在两列上连接,其中一列总是有值,而另一列可能没有。

采样这个

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我希望通过加入categorysubcategory列来获得表格中每个条目旁边的截止值。对于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

我一直在尝试按照下面的查询进行思考,问题当然是它不能按照我想要的方式工作,因为它不能正确处理 null 情况。

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的查询not null?是否有适用于单个查询的选项?

4

2 回答 2

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
于 2014-10-14T16:12:10.540 回答
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)
于 2014-10-14T16:05:16.343 回答