sql查询合并2个字段

sql查询合并2个字段,sql,field,Sql,Field,我有一个查询,从几个表中检索,但有两个表具有相同的字段值 疑问是 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 I

我有一个查询,从几个表中检索,但有两个表具有相同的字段值

疑问是

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 
这种情况下,两个字段都可能有空值或null,或者其中一个字段为空/null,但到目前为止两个字段中都没有值,这意味着只有一个字段有值

您尝试过吗

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

大多数DBMS具有类似NVL的功能:

NVL(B.NDG, D.NDG) as NDG
如果不为空,则返回B.NDG,否则返回D.NDG


NVL是Oracle的,但是dbms可能有一个等价物。两列是否可以在同一行上都有一个值?最多一个NDG有一个值是真的吗?NDG的值是多少?其中
NUM\u RIF=0000009000004914
?在您的示例中,列是空白,而上面您键入了
(null)
。e、 g.它是一个长度为零的字符串吗?另外,您是否考虑了特定的SQL产品?(我猜名称为apachemysql;)或
Coalesce(B.NDG,d.NDG)作为NDG
也可以正常工作。但是,此逻辑有一个问题,只有当第一个参数
b.ndg
为空时,才需要
d.ndg
。所以选择你的第一个参数wisely@NaveenBabu,是的,我认为它是SQL server的等价物NVL@NaveenBabu:
COALESCE()
是标准的SQL等价物,它实际上是由SQL Server实现的。SQL Server还有一个专有的
ISNULL()
函数,其语义稍有不同。