SQL Server需要在Stuff函数中处理NULL值

时间:2017-08-21 09:40:23

标签: sql-server-2014

My Required Output should be like this我必须用分隔符连接多值记录的子流量,如果中间子值为null,我必须与Just separator连接。我写了以下代码。

SELECT B.ACCOUNT_NUMBER ,B.co_code,(select CASE WHEN OTHER_OFFICER IS NOT NULL AND  0 < (SELECT COUNT(C.ACCOUNT_NUMBER) FROM EFZ_ACCOUNT_DETAILS C
where C.ACCOUNT_NUMBER = A.ACCOUNT_NUMBER AND C.OTHER_OFFICER IS NULL ) THEN ISNULL(B.OTHER_OFFICER +']',']')
ELSE NULL
END
from EFZ_ACCOUNT_DETAILS A
    where A.ACCOUNT_NUMBER = b.ACCOUNT_NUMBER
    FOR XML PATH(''))AS ACC_DEB_LIMIT
FROM EFZ_ACCOUNT_DETAILS b
GROUP BY ACCOUNT_NUMBER,co_code

这是有效的,但即使多值记录的所有子值都为null,它也会与分隔符连接,输出就像这样

I would like to display NULL incase all the subvalues are null and I need to remove the separator at the ending of the string. Please help me in this regard. Thanks in Advance

我也尝试了这个逻辑,它给了我相同的结果

SELECT ACCOUNT_NUMBER ,co_code, STUFF(( SELECT  isnull(']'+ OTHER_OFFICER,']') FROM EFZ_ACCOUNT_DETAILS a
WHERE b.ACCOUNT_NUMBER = a.ACCOUNT_NUMBER FOR XML PATH('')),1 ,1, '')  alt_account_type
FROM EFZ_ACCOUNT_DETAILS b
GROUP BY ACCOUNT_NUMBER,co_code;

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的要求,但此查询是否会解决您的问题。

SELECT 
 CASE 
 WHEN d IS NULL AND c IS NOT NULL  THEN
   ISNULL(a,'')+']'+ISNULL(b,'')+']'+ c
 WHEN d IS NULL AND c IS NULL AND b IS NOT NULL  THEN 
   ISNULL(a,'')+']'+ b
 WHEN d IS NULL AND c IS NULL AND b IS NULL AND a IS NOT NULL THEN 
   a
 WHEN d IS NULL AND c IS NULL AND b IS NULL AND a IS NULL THEN  
   NULL
 ELSE
   ISNULL(a,'')+']'+ISNULL(']'+b,'')+']'+ISNULL(']'+c,'')+']'+ISNULL(d,'')+']'

END 来自TestTable;

请参阅SQL fiddle