Возвращает строку с каждым отдельным значением или нулем, если все равны нулю, используя FOR XML PATH
У меня есть такой запрос:
select stuff (
(select '; ' + isnull(org.Number, '-')
from Organization org
for xml path('')), 1, 2, ''
)
Мне нужно вернуть строку со всеми значениями, включая нули, так что ее количество значений равно количеству организаций, но если ВСЕ значения являются пустыми или нулевыми, мне нужно вернуть пустую строку или ноль (не имеет значения).
Первой мыслью было использовать регулярное выражение и проверить, есть ли цифры в возвращаемом запросе. но это не так просто в использовании. Есть ли другие варианты, чтобы решить это?
Например, если таблица Organization содержит
ID | Number
1 | 123456
2 | null
3 | 3232
тогда приведенная строка должна быть '123456; -; 3232'
если таблица Организация содержит
ID | Number
1 | null
2 | null
3 | null
приведенная строка должна быть null
1 ответ
Решение
Вот один из способов
select
iif(patindex('%[0-9]%', res) = 0, null, res)
from
(select res = stuff((
select
'; ' + isnull(cast(number as varchar(200)), '-')
from
Organization
order by id
for xml path('')
), 1, 2, '')
) t