Я хотел бы вернуть несколько значений в операторе case, например :
SELECT
CASE
WHEN <condition 1> THEN <value1=a1, value2=b1>
WHEN <condition 2> THEN <value1=a2, value2=b2>
ELSE <value1=a3, value3=b3>
END
FROM <table>
Конечно, я могу написать условие case несколько раз, каждый раз возвращая одно значение. Однако, поскольку у меня много условий, скажем, 100. Не очень хорошо повторять условие case снова и снова.
Еще один вопрос, который я хотел бы задать, что произойдет, если одна запись соответствует нескольким условиям? Это означает, что она вернет все из них или только последнее? Например, условие 1 может стать подмножеством условия 2. Что произойдет?
SELECT
xmlcol.value('(value1)[1]', 'NVARCHAR(MAX)') AS value1,
xmlcol.value('(value2)[1]', 'NVARCHAR(MAX)') AS value2
FROM
(SELECT CASE
WHEN <condition 1> THEN
CAST((SELECT a1 AS value1, b1 AS value2 FOR XML PATH('')) AS XML)
WHEN <condition 2> THEN
CAST((SELECT a2 AS value1, b2 AS value2 FOR XML PATH('')) AS XML)
ELSE
CAST((SELECT a3 AS value1, b3 AS value2 FOR XML PATH('')) AS XML)
END AS xmlcol
FROM <table>) AS tmp