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

Откуда:
Сообщений: 77
Задача в Select'е в Case, при получении FALSE всех When, в условии ELSE сделать несколько действий.

Например:

SELECT
CASE
WHEN
b.Data.value('(data/field[@id = 429])[1]','varchar(100)')='24x7' OR b.Data.value('(data/field[@id = 429])[1]','varchar(100)')='24х7' OR b.Data.value('(data/field[@id = 429])[1]','varchar(100)')=''
THEN '24x7'
ELSE
SUBSTRING(b.Data.value('(data/field[@id = 429])[1]','varchar(100)'), 1, 2),
SUBSTRING(b.Data.value('(data/field[@id = 429])[1]','varchar(100)'), 4, 2),
SUBSTRING(b.Data.value('(data/field[@id = 429])[1]','varchar(100)'), 8, 5),
SUBSTRING(b.Data.value('(data/field[@id = 429])[1]','varchar(100)'), 14, 5)
END
FROM <...>
19 янв 15, 17:09    [17139306]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Glory
Member

Откуда:
Сообщений: 104751
Pim.
сделать несколько действий.

действий вы можете делать столько, сколько вам угодно
Но возвращаемое выражение должно быть одно
19 янв 15, 17:10    [17139325]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
То есть Вы хотите вернуть или один или три столбца?
19 янв 15, 17:11    [17139333]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
Glory
Pim.
сделать несколько действий.

действий вы можете делать столько, сколько вам угодно
Но возвращаемое выражение должно быть одно


А как-нибудь обойти это можно?
19 янв 15, 17:11    [17139338]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
Владислав Колосов,

Или один, или 4.
19 янв 15, 17:12    [17139341]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Glory
Member

Откуда:
Сообщений: 104751
Pim.
Glory
пропущено...

действий вы можете делать столько, сколько вам угодно
Но возвращаемое выражение должно быть одно


А как-нибудь обойти это можно?

Еще один любитель обходить правила
Пишите столько case, сколько полей вы хотите получить
19 янв 15, 17:12    [17139356]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
nizamovich
Member

Откуда: Москва
Сообщений: 116
Pim.,

написать столько кейсов , сколько нужно вывести значений
19 янв 15, 17:12    [17139358]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Pim.
Glory
пропущено...

действий вы можете делать столько, сколько вам угодно
Но возвращаемое выражение должно быть одно


А как-нибудь обойти это можно?


Так нельзя, все кортежи одного отношения имеют одинаковое количество атрибутов.
19 янв 15, 17:16    [17139382]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
Владислав Колосов,

Есть какие-нибудь предложения, как это можно реализовать?
19 янв 15, 17:18    [17139392]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Glory
Member

Откуда:
Сообщений: 104751
Pim.
Есть какие-нибудь предложения, как это можно реализовать?

Еще раз
Все записи результата _должны_ иметь одинаковое число полей
19 янв 15, 17:20    [17139409]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
Glory,

Может быть как-нибудь иначе можно реализовать данную задачу?
19 янв 15, 18:23    [17139512]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Pim.,

SELECT '24x7', '', '', '' 
FROM ... 
WHERE <условие выполняется>

UNION ALL

SELECT 
  SUBSTRING(...),  
  SUBSTRING(...),
  SUBSTRING(...),
  SUBSTRING(...)
FROM ...
WHERE <условие не выполняется>

ну или чтоб FROM два раза не писать можно с помощью CROSS APPLY то же самое сделать
19 янв 15, 18:29    [17139535]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
Shakill,

Отличная идея, спасибо!
19 янв 15, 18:31    [17139543]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Shakill,

Не получается, у вас же всегда выводится 4 столбца. А автору нужно:
Pim.
Или один, или 4.

Это нерешаемо.
19 янв 15, 23:05    [17140411]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Pim.
Member

Откуда:
Сообщений: 77
alexeyvg,

Да. Я уже понял, поэтому пришел к тому, что необходимо всегда 4
19 янв 15, 23:11    [17140427]     Ответить | Цитировать Сообщить модератору
 Re: Case when <...> Else несколько действий End  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Pim.,

тогда пишите case для каждого поля или используйте CTE.
20 янв 15, 11:04    [17141666]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить