Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбор варианта значения в case условии / 4 сообщений из 4, страница 1 из 1
30.09.2019, 15:05
    #39869198
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор варианта значения в case условии
Вот запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
select 
*
from
(
select
s.CONTRACT_DTM,
r.DIVISION_ID ,
s.DIVISION_ID as  div,
avg(coalesce(NULLIF( r.RENT_SUM  , 0),NULLIF( r.RENT_SUM_MAX  , 0),NULLIF( r.RENT_SUM_MIN  , 0))) as av
from 
ODI_STAGE.dbo.T_RENT_CONTRACT_COND_SNST s
inner join ODI_STAGE.dbo.T_RENT_TURNOVER_FEE_SNST r
on s.RENT_CONTRACT_COND_ID=r.RENT_CONTRACT_COND_ID
where r.DIVISION_ID=96335
group by 
s.CONTRACT_DTM,
r.DIVISION_ID,
s.DIVISION_ID
) ag2
left join 
(
select
max(s.CONTRACT_DTM) as CONTRACT_DTM2,
r.DIVISION_ID  as DIVISION_ID2,
s.DIVISION_ID as  div2
from 
ODI_STAGE.dbo.T_RENT_CONTRACT_COND_SNST s
inner join ODI_STAGE.dbo.T_RENT_TURNOVER_FEE_SNST r
on s.RENT_CONTRACT_COND_ID=r.RENT_CONTRACT_COND_ID
where r.DIVISION_ID=96335
group by 
r.DIVISION_ID,
s.DIVISION_ID
) ag1 on ag2.CONTRACT_DTM=ag1.CONTRACT_DTM2



вот результат
[img=]

как написать case условие чтобы если значение DIVISION_ID2 не пустое то ставим значение av которое соответствует по contract_dtm в табл ag1 и ag2 но если DIVISION_ID2 null то берем значение av которое соответствует max(ag2.contract_dtm)
...
Рейтинг: 0 / 0
30.09.2019, 15:46
    #39869248
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор варианта значения в case условии
Romanov-krd,

вычислите max(contract_dtm) в внутри ag2 в дополнительном поле и присвойте этому полю алиас.
Во внешнем SELECTе выбросьте звёздочку (и никогда больше её не пишите, кром как в EXISTS),
перечислите нужные поля из LEFT JOINа (в том числе вот этот вот max внутри CASE WHEN DIVISION_ID2 IS NULL THEN ... ELSE ... END).
...
Рейтинг: 0 / 0
30.09.2019, 16:17
    #39869289
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор варианта значения в case условии
iap,

так он же тогда будет брать avg по 3 полям
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
select 
case when ag1.DIVISION_ID2 IS null then ag2.max_dtm
else ag1.CONTRACT_DTM2 end,
ag2.av, ag2.DIVISION_ID
from
(
select
MAX(s.CONTRACT_DTM) as max_dtm,
r.DIVISION_ID ,
s.DIVISION_ID as  div,
avg(coalesce(NULLIF( r.RENT_SUM  , 0),NULLIF( r.RENT_SUM_MAX  , 0),NULLIF( r.RENT_SUM_MIN  , 0))) as av
from 
ODI_STAGE.dbo.T_RENT_CONTRACT_COND_SNST s
inner join ODI_STAGE.dbo.T_RENT_TURNOVER_FEE_SNST r
on s.RENT_CONTRACT_COND_ID=r.RENT_CONTRACT_COND_ID
where r.DIVISION_ID=96335
group by 
r.DIVISION_ID, s.DIVISION_ID
) ag2
left join 
(
select
max(s.CONTRACT_DTM) as CONTRACT_DTM2,
r.DIVISION_ID  as DIVISION_ID2,
s.DIVISION_ID as  div2
from 
ODI_STAGE.dbo.T_RENT_CONTRACT_COND_SNST s
inner join ODI_STAGE.dbo.T_RENT_TURNOVER_FEE_SNST r
on s.RENT_CONTRACT_COND_ID=r.RENT_CONTRACT_COND_ID
where r.DIVISION_ID=96335
group by 
r.DIVISION_ID,
s.DIVISION_ID
) ag1 on ag2.max_dtm=ag1.CONTRACT_DTM2



3.23 а должен быть 3.97 по дате максимальной и то если нет DIVISION_ID2 IS NULL
...
Рейтинг: 0 / 0
30.09.2019, 16:19
    #39869296
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выбор варианта значения в case условии
если к примеру все в division_id is null справа и нет 2019-03-27 то берем значение av 3.97 за дату 2019-01-21
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбор варианта значения в case условии / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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