SQL解码或具有多行和空行/空行的max

时间:2018-01-31 19:46:57

标签: sql oracle

我正在尝试返回1行,当表中包含空行/空行和多行时。

表1.cust(唯一) Table2.prop(3个字段创建一个具有一个到多个cust的唯一ID) Table3.start(cust [cust,prop和start]存在一些空白/空记录)

问题在于解码和table1,table2和表3的连接。如果我只是使用table1进行连接而没有解码,我会获得额外的记录并且不会获得空记录,但是当我将这三个表组合在一起时,我仍然没有得到空/空记录。

示例代码

select table1.cust,
   table2.prop.(3 fields),
   decode(table3.startdate,' ','1901/01/01',
                            null,'1901/01/01',
                            table3.start)
from table1, table2(subquery), table3(subquery)
where table1 = table2(+)
and (table1.cust = table2.cust(+)
and table2.(3 fields) = table3.(3 fields))

返回 Cust1,prop3,date3 Cust2 - 失踪 Cust3,prop2,date2 Cust4,prop1,date1

示例代码

select table1.cust,
   table2.prop.(3 fields),
   decode(table3.startdate,' ','1901/01/01',
                            null,'1901/01/01',
                            table3.start)
from table1, table2(subquery), table3(subquery)
where table1 = table2(+)
and (table1.cust = table2.cust(+)
and table2.(3 fields) = table3.(3 fields))

返回

Cust1, prop1, date1 (not the last record)
Cust1, prop2, date2 (not the last record)
Cust1, prop3, date3 - Good
Cust2, prop1, date1 - Good
Cust3, prop1, date1 (not the last record)
Cust3, prop2, date2 - Good
Cust4, prop1, date1 - Good

1 个答案:

答案 0 :(得分:0)

我无法确定,因为我不完全理解你的写作,但问题很可能是:

and table2.(3 fields) = table3.(3 fields))

排除任何一方的nullnull = null在SQL中不正确,因此在where中会导致排除行。

尝试在适当的位置添加(+)(或or xxx is null)以停止排除您想要的行,或者放弃那种可怕的,过时的和令人困惑的语法并与from table1 left join table2 on table2.f = table1.f一起使用:)< / p>

另外,您可能需要阅读ternary logic