#sql-server #tsql
#sql-server #tsql
Вопрос:
Как реализовать правило типа «если оба значения [Procedure], cs.[description]
равны нулю, IsNULL([Procedure], cs.[description]
то используйте IsNULL([Procedure], [code]
» в моем запросе?
STUFF((SELECT ',' ISNULL([Procedure], cs.[description])
FROM [Procedure] pr
LEFT JOIN [xx].Codeset.CodeDefinition cs
ON pr.ProcedureCode COLLATE Latin1_General_CI_AS = cs.code
AND cs.codeSetId = (SELECT id
FROM [xx].CodeSet.CodeSet fc
WHERE fc.identifier = 'com'
AND cs.codingSystem LIKE 'I')
WHERE Type = 'S'
AND ID = Pc.BID
FOR XML PATH('')), 1, 1, '') AS Procedures,'
Может кто-нибудь подсказать, как достичь этой цели?
Комментарии:
1. Ваш вопрос неясен … не могли бы вы расширить, пожалуйста.
2. Вы просто хотите
COALESCE([Procedure], cs.[description], [code])
?3. @DaleK — Я изменил свой вопрос. Пожалуйста, предоставьте мне полное решение. Спасибо
4. Вы пробовали то, что я предложил?
coalesce
позволяет вводить более 2 значений и продолжает работу до тех пор, пока не будет найдено значение, не являющееся значением. Насколько я могу судить, это решает вашу проблему — просто замените ваш текущийisnull
на предложенныйcoalesce
мной.5. @DaleK, спасибо! Это решило мою проблему.
Ответ №1:
Используйте Coalesce.
STUFF((SELECT ',' Coalesce([Procedure], cs.[description],[code])
FROM [Procedure] pr
LEFT JOIN [xx].Codeset.CodeDefinition cs
ON pr.ProcedureCode COLLATE Latin1_General_CI_AS = cs.code
AND cs.codeSetId = (SELECT id
FROM [xx].CodeSet.CodeSet fc
WHERE fc.identifier = 'com'
AND cs.codingSystem LIKE 'I')
WHERE Type = 'S'
AND ID = Pc.BID
FOR XML PATH('')), 1, 1, '') AS Procedures