我在 SQL 中有COALESCE语句,如下所示:
有人请协助在SQL中使用COALESCE功能吗?谢谢。乔
我到目前为止编码为
COALESCE(IFRM.NAME + '_' + IFRM.TAG, + '_' +ISNULL('_'+ LFRM.NAME, ''))+ '-->' + '_'+ ITO.NAME +'_'+ ITO.TAG +ISNULL('_'+ LTO.NAME, '') AS TEST,
矿产量:
TEST
DAL_L-->_JBU_U_HAL
JBU_U-->_UAE_E
AAL_L-->_KLM_M_ASA
(null)
(null)
下面是我用于CASE声明的表格
Main:
ID FRM_IAD_ID TO_IAD_ID FRM_ATL_ID TO_ATL_ID FRM_ORD_ID TO_ORD_ID FRM_LAX_ID TO_LAX_ID
9014 3215 1618 1149
9014 1618 1407 1149
9051 1600 1601 1137
9051 1601 1688 1137
9059 6108 9764
IAD:
ID Name tag
1407 UAE E
1600 AAL L
1601 KLM M
1618 JBU U
3215 DAL L
6108 EVA A
ATL:
ID Name Tag
1688 Japan Airlines
ORD:
ID name Tag
9764 QTR
LAX:
ID Name Tag
1137 ASA
1149 HAL
答案 0 :(得分:2)
以下是使用COALESCE()
和STUFF()
的方法:
(STUFF(COALESCE('_' + IFRM.NAME, '') + COALESCE('_' + IFRM.TAG, '') + COALESCE('_' + LFRM.NAME, ''),
1, 1, ''
) + '-->' + -- if you want spaces, use `' --> '`
STUFF(COALESCE('_'+ ITO.NAME, '') + COALESCE('_' + ITO.TAG, '') + COALESCE('_' + LTO.NAME, ''),
1, 1, '')
) AS TEST,
我们的想法是将'_'
添加到所有组件,然后使用STUFF()
删除第一个组件。
我注意到CASE
在箭头周围有空格。您的示例代码没有。
其他一些数据库支持CONCAT_WS()
这样的功能,这使得这更加简单。
答案 1 :(得分:0)
您无需将Case转换为Coalesce。 Coalesce只是一个case语句的简写,其中每个值都测试为null。您的case语句结构比尝试将其插入Coalesce语句更受欢迎,并且您将无法在Coalesce结构中干净地测试多个字段。
看起来您可能会问如何阻止从Case语句返回null。您需要添加一个始终求值为非空值的Else语句。
顺便说一句,Coalesce语句的最后一个元素也作为Else子句处理。不要求Coalesce返回非空值。只要分配了数据类型,就可以返回null。