2011-11-30 75 views
0

我有一个查询,从具有相同的字段值几桌,但2下表中检索,SQL查询到2场结合

查询

SELECT A.NUM_RIF, B.NDG, D.NDG FROM ICGR1100 A 
LEFT JOIN (ICGR1105 E INNER JOIN ICGR1101 D ON E.C_IST=D.C_IST AND E.DT_DOM_NDG=D.DT_DOM_NDG AND E.N_DOM=D.N_DOM) ON A.C_IST=E.C_IST AND A.NUM_RIF=E.NUM_RIF 
LEFT JOIN ICGR1103 B ON A.C_IST=B.C_IST AND A.NUM_RIF=B.NUM_RIF 

的结果是:

NUM_RIF   NDG    NDG    
---------------- ---------------- ---------------- 
0000000000000981 (null)   0000000000002490 
0000000000000985 (null)   0000000000002490 
0000009000004523 0000000000001775 (null)     
0000009000004521 0000000000001775 (null)   
0000009000004218 0000000000001775 (null)   
0000000000000980 (null)   (null)   
0000009000004914     0000000000002490 
0000009000004917      
0000009000004923     0000000000002490 

所以我的期望结果如下:

NUM_RIF   NDG       
---------------- ---------------- 
0000000000000981 0000000000002490 
0000000000000985 0000000000002490 
0000009000004523 0000000000001775     
0000009000004521 0000000000001775   
0000009000004218 0000000000001775   
0000000000000980 (null)     
0000009000004914 0000000000002490 
0000009000004914 
0000009000004923 0000000000002490 

这种情况是两个字段可能都有空值,或者为空,或者其中一个将为空/空值,但到目前为止在两个字段中都没有值,这意味着只有一个字段有值

+0

这两列可以在同一行上有一个值吗? –

+0

至多有一个NDG具有价值是否总是如此? – Fildor

+0

'NUM_RIF = 0000009000004914'的'NDG'的值是多少?在你的例子中,列是空格,而在上面输入'(null)'。例如它是一个零=长度的字符串?另外,你是否有一个特定的SQL产品? (用Apache的名字猜猜mySQL;) – onedaywhen

回答

1

大多数DBMS有NVL像功能:如果没有其他空

NVL(B.NDG, D.NDG) as NDG 

将返回B.NDG D.NDG

NVL是Oracle,但有可能是一个相当于你的dbms

+0

或'Coalesce(B.NDG,D.NDG)作为NDG'也能正常工作。但是,这个逻辑有一个问题,如果第一个参数'b.ndg'为空,它只需要'd.ndg'。因此,明智地选择你的第一个参数 –

+0

@NaveenBabu,是的,我认为它是SQL服务器的等效NVL –

+0

@NaveenBabu:'COALESCE()'是SQL Server确实实现的标准SQL等价物。 SQL Server也有一个专有的'ISNULL()'函数,语义略有不同。 – onedaywhen

1

您试过

SELECT A.NUM_RIF, COALESCE(B.NDG, D.NDG) FROM ICGR1100 A 
...