Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
Здравствуйте!
Суть: в запросе выбрать те строки, данные в полях которых не соответствуют шаблону, и в доп. поле вписывать комментарии - названия таких полей, (полей немного, можно вручную прописать). Например, не указана дата рождения или номер паспорта, нужно вывести эту запись и указать: Дата рождения, номер паспорта.
Пытался сделать через переменную, и как понял, в одном select'е нельзя совместить выборку и присвоение переменной...
Что подскажите?
17 фев 14, 12:34    [15576433]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
Glory
Member

Откуда:
Сообщений: 104751
VUsachev
в запросе выбрать те строки, данные в полях которых не соответствуют шаблону, и в доп. поле вписывать комментарии - названия таких полей,

CASE WHEN ... THEN ... END
17 фев 14, 12:42    [15576533]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
А можно простой пример с присвоением? Я пробовал эту конструкцию, не смог присвоить, вроде этого:
CASE
WHEN (RTRIM(identity_birthDate)='' or YEAR(GETDATE()) - YEAR(RTRIM(identity_birthDate)) >80)
THEN SET @Message = @Message + 'Дата'
ELSE ''
END AS [Замечания]
17 фев 14, 12:48    [15576585]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
Glory
Member

Откуда:
Сообщений: 104751
VUsachev
А можно простой пример с присвоением?

Не будет там никакого присвоения. Потому что оно невозможно.
select ...
CASE
WHEN (RTRIM(identity_birthDate)='' or YEAR(GETDATE()) - YEAR(RTRIM(identity_birthDate)) >80)
THEN 'Дата'
ELSE '' END AS [Замечания]
... from mytable
17 фев 14, 12:51    [15576612]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
VUsachev,

CASE - это функция! Как можно в аргументе функции выполнять команду SET?!
Вообще, непонятный смысл поля identity_birthDate и каким условиям оно должно удовлетворять
17 фев 14, 12:53    [15576633]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
Glory
Member

Откуда:
Сообщений: 104751
RTRIM(identity_birthDate)='' - это вы так с типом datetime работаете ?
17 фев 14, 12:55    [15576647]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
Это понял, спасибо. Должен же быть способ без присвоения? Для всех условий отбора "брака" CASE писать бессмысленно, условий много и они комбинируются.
Glory, поле identity_birthDate в виде строки nvarchar
Ещё раз: нужно в поле [Замечания] вывести названия некорректно заполненных полей...
17 фев 14, 13:09    [15576752]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
Glory
Member

Откуда:
Сообщений: 104751
VUsachev
Ещё раз: нужно в поле [Замечания] вывести названия некорректно заполненных полей...

Еще раз - приведнный запрос как раз и выводит список тех полей, что вы обработаете своим case
17 фев 14, 13:11    [15576759]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
Glory, такой запрос выводит в поле [Замечания] строку "Дата" для тех записей, где дата неверна, и всё.
А нужно, чтобы в этом поле были сообщения обо всех некорректных данных.
Пример вывода:
№ / Ф И О / Замечания
1 | Иванов Иван Иванович | Дата рождения, Серия паспорта, Номер паспорта
2 | Юный Иван Петрович | Серия паспорта, Пол
...
17 фев 14, 13:21    [15576821]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
Может, можно как-то через функцию? В ней проверять условия для выбранной записи, формировать строку и возвращать в SELECT?
17 фев 14, 13:24    [15576836]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
П-Л
Guest
ТС, напишите "длинный" кейз, где для каждой проверки будет либо строка либо пусто и соедините их в одну общую строку.

CASE WHEN <condition1> THEN err1 + ' ' ELSE '' END
+ CASE WHEN <condition2> THEN err2 + ' ' ELSE '' END
+ CASE WHEN <condition3> THEN err3 + ' ' ELSE '' END AS errMessage
17 фев 14, 13:25    [15576855]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
Glory
Member

Откуда:
Сообщений: 104751
VUsachev
Glory, такой запрос выводит в поле [Замечания] строку "Дата" для тех записей, где дата неверна, и всё.

Потому что в CASE вы написали "дата и все"
Напишите больше - будет больше выводить
17 фев 14, 13:27    [15576862]     Ответить | Цитировать Сообщить модератору
 Re: В SELECT вывод строки, в зависимости от условий??  [new]
VUsachev
Member

Откуда:
Сообщений: 6
Это то, что надо! Спасибо всем =)
17 фев 14, 13:31    [15576893]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить