powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбор варианта значения в case условии
4 сообщений из 4, страница 1 из 1
выбор варианта значения в case условии
    #39869198
Romanov-krd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот запрос
Код: 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
выбор варианта значения в case условии
    #39869248
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romanov-krd,

вычислите max(contract_dtm) в внутри ag2 в дополнительном поле и присвойте этому полю алиас.
Во внешнем SELECTе выбросьте звёздочку (и никогда больше её не пишите, кром как в EXISTS),
перечислите нужные поля из LEFT JOINа (в том числе вот этот вот max внутри CASE WHEN DIVISION_ID2 IS NULL THEN ... ELSE ... END).
...
Рейтинг: 0 / 0
выбор варианта значения в case условии
    #39869289
Romanov-krd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
выбор варианта значения в case условии
    #39869296
Romanov-krd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если к примеру все в division_id is null справа и нет 2019-03-27 то берем значение av 3.97 за дату 2019-01-21
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / выбор варианта значения в case условии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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