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()
函数,其语义稍有不同。