Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 можно ли обойти повторяющийся case  [new]
date_case
Guest
одна таблица с кучей дат date1, date2, ... копируется в другую путем select into.
каждой дате соответствует id_date (id_date1, id_date2, ...)
+ имеется переменная, заданная 1 раз перед селектом
declare @id_data int


в создаваемой таблице часть полей это некий ранг, вычисляемый по разнице @id_date - id_date.
этот ранг дается case-ом:
case
when @id_data-isnull(id_date1,0)<=30
then 1
when @id_data-isnull(id_date1,0)>30 and 
@id_data-isnull(id_date1,0)<=60
then 2
when @id_data-isnull(id_date1,0)>60 and 
@id_data-isnull(id_date1,0)<=100
then 3
when @id_data-isnull(id_date1,0)>100 and 
@id_data-isnull(id_date1,0)<=180
then 4
when @id_data-isnull(id_date1,0)>180 and 
@id_data-isnull(id_date1,0)<=365
then 5
when @id_data-isnull(id_date1,0)>365 
	and id_date1 is not null
then 6
else 0
end

и для каждой даты считается одинаковым case-ом (меняется только id_date1, id_date2,...).
никак нельзя избавиться от этой кучи кейсов?
5 мар 12, 13:28    [12195503]     Ответить | Цитировать Сообщить модератору
 Re: можно ли обойти повторяющийся case  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
date_case,
можно оформить этот case как скалярную функцию
5 мар 12, 13:31    [12195538]     Ответить | Цитировать Сообщить модератору
 Re: можно ли обойти повторяющийся case  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
date_case,
еще можно развернуть столбцы в строки - применить кейс - развернуть строки в столбцы
например
5 мар 12, 13:34    [12195597]     Ответить | Цитировать Сообщить модератору
 Re: можно ли обойти повторяющийся case  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
CASE написан с избыточностью.
Но какая необходимость от него избавляться?
case
 when @id_data-isnull(id_date1,0)<=30
 then 1
 when @id_data-isnull(id_date1,0)<=60
 then 2
 when @id_data-isnull(id_date1,0)<=100
 then 3
 when @id_data-isnull(id_date1,0)<=180
 then 4
 when @id_data-isnull(id_date1,0)<=365
 then 5
 when id_date1 is not null
 then 6
 else 0
end
5 мар 12, 13:35    [12195612]     Ответить | Цитировать Сообщить модератору
 Re: можно ли обойти повторяющийся case  [new]
date_case
Guest
iap,

необходимости особой нет,
просто противный длиннючий код.
а и то правда, половина кода ненужна,
сейчас хоть это повыкидываю, спасибо
5 мар 12, 13:42    [12195690]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить