Как реализовать несколько условий в моем sql-запросе

#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