Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дублирование кода исключить / 7 сообщений из 7, страница 1 из 1
19.07.2021, 15:05
    #40084669
minva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
SQL Server 2008
Есть возможность переписать этот код без дублирования и дополнительного нагромождения? Спасибо
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select 
case 
when 
    case when Field1-Field2 > 0 then Field1-Field2-Field3
	     when Field1-Field2 < 0 then Field1-Field2
    else 0
end < 0
then 0
else
  case when Field1-Field2 > 0 then Field1-Field2-Field3
	   when Field1-Field2 < 0 then Field1-Field2
  else 0
end
from table1
...
Рейтинг: 0 / 0
19.07.2021, 15:18
    #40084672
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(
 select
  case
   when t.Field1-t.Field2 > 0 then t.Field1-t.Field2-t.Field3
   when t.Field1-t.Field2 < 0 then t.Field1-t.Field2
   else 0
  end
) a(x)
...
Рейтинг: 0 / 0
19.07.2021, 16:39
    #40084691
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
invm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(
 select
  case
   when t.Field1-t.Field2 > 0 then t.Field1-t.Field2-t.Field3
   when t.Field1-t.Field2 < 0 then t.Field1-t.Field2
   else 0
  end
) a(x)



Если поднапрячЬся
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(
 select
  case
   when t.Field1-t.Field2 > 0 then t.Field1-t.Field2-t.Field3
   else  0
  end
) a(x)
...
Рейтинг: 0 / 0
19.07.2021, 16:40
    #40084692
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
А ведь можно еще поднапрячЬся...
...
Рейтинг: 0 / 0
19.07.2021, 16:52
    #40084697
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(
 select
  t.Field1 - t.Field2 - case when t.Field1 > t.Field2 then t.Field3 else 0 end
) a(x)
...
Рейтинг: 0 / 0
19.07.2021, 21:54
    #40084746
godsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
извиняюсь, а не проще ли будет
Код: sql
1.
2.
3.
4.
select case when a.x > 0 then a.x else 0 end
from (
      select  Field1-Field2-Field3 as x  from table1 
) a (x)
...
Рейтинг: 0 / 0
20.07.2021, 07:40
    #40084776
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дублирование кода исключить
invm
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(
 select
  t.Field1 - t.Field2 - case when t.Field1 > t.Field2 then t.Field3 else 0 end
) a(x)


Согласно последних веяний положено писать так:
Код: sql
1.
2.
3.
4.
select 
 case when a.x < 0 then 0 else a.x end
from table1 t cross apply
(Values (t.Field1 - t.Field2 - case when t.Field1 > t.Field2 then t.Field3 else 0 end)) a(x)


:)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Дублирование кода исключить / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]