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

Откуда:
Сообщений: 120
Вот запрос
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)

К сообщению приложен файл. Размер - 5Kb
30 сен 19, 15:05    [21982794]     Ответить | Цитировать Сообщить модератору
 Re: выбор варианта значения в case условии  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Romanov-krd,

вычислите max(contract_dtm) в внутри ag2 в дополнительном поле и присвойте этому полю алиас.
Во внешнем SELECTе выбросьте звёздочку (и никогда больше её не пишите, кром как в EXISTS),
перечислите нужные поля из LEFT JOINа (в том числе вот этот вот max внутри CASE WHEN DIVISION_ID2 IS NULL THEN ... ELSE ... END).
30 сен 19, 15:46    [21982875]     Ответить | Цитировать Сообщить модератору
 Re: выбор варианта значения в case условии  [new]
Romanov-krd
Member

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

так он же тогда будет брать avg по 3 полям
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

К сообщению приложен файл. Размер - 3Kb
30 сен 19, 16:17    [21982928]     Ответить | Цитировать Сообщить модератору
 Re: выбор варианта значения в case условии  [new]
Romanov-krd
Member

Откуда:
Сообщений: 120
если к примеру все в division_id is null справа и нет 2019-03-27 то берем значение av 3.97 за дату 2019-01-21
30 сен 19, 16:19    [21982939]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить