2017-08-21 2 views
0

My Required Output should be like this Je dois concaténer les sous-pages d'un enregistrement à plusieurs valeurs avec séparateur et si la sous-valeur moyenne est nulle, je dois concaténer avec Just separator. J'ai écrit le code suivant.SQL Server Nécessité de gérer les valeurs NULL dans la fonction Stuff

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 

Cela fonctionne, mais même si tous les subvalues ​​d'un enregistrement à plusieurs valeurs sont nulles, il est concaténer avec le séparateur et la sortie est à venir comme celui-ci

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

J'ai essayé cette logique aussi , il me donne le même résultat

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; 
+0

format bail mieux le code – berserck

+0

SELECT ACCOUNT_NUMBER, co_code, STUFF ((SELECT isnull (']' + OTHER_OFFICER, ']') DE EFZ_ACCOUNT_DETAILS WHERE b.ACCOUNT_NUMBER = a.ACCOUNT_NUMBER FOR XML CHEMIN ('')), 1, 1, '') alt_account_type FROM EFZ_ACCOUNT_DETAILS b GROUP BY ACCOUNT_NUMBER, co_code; Cela me donne aussi la même sortie –

+0

Vous utilisez ISNULL Wrong, Quand vous faites isnull (']' + OTHER_OFFICER, ']') et OTHER_OFFICER est NULL, vous aurez ISNULL (']' + NULL, ']') et ']' + NULL n'est pas nul. Essayez de faire ISNULL (OTHER_OFFICER, '') + ']' – berserck

Répondre

0

Je ne suis pas sûr si j'ai complètement compris vos besoins, mais cette requête sol votre problème.

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 FROM TestTable;

Voir la SQL fiddle

+0

Le problème est, ici le nombre de sous-valeurs n'est pas fixe et aussi dans mon exemple donné a, b, c et d ne sont pas des colonnes ce sont des valeurs d'une colonne sous-évaluée. S'il vous plaît laissez-moi savoir si plus de clarification est nécessaire –