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

Откуда:
Сообщений: 120
Запрос выбирает максимальное минимальное и среднее значение по объекту(подзапрос с union). Но если значение 1 у объекта - выбирает его как максимальное и минимальное. Как сделать чтобы в случае если у объекта одно значение - выводило не макс и мин значение а только макс 1 раз

select	DISTINCT 
	COND.CT_CONTRACT_ID,
	COND.CONTRACT_NUM,
	COND.CONTRACT_DTM,
	coalesce( CUR.CURRENCY_ID,3),
	LNK.DIVISION_ID,
	case when MULT.CT_CONTRACT_ID is null then -1 else lnk.CNTR_KIS_ID end,
	V_RENT_MM.ACCOUNT_ID,
	LNK.BEGIN_DTM,
	LNK.END_DTM,
	V_RENT_MM.RENT_SUM_MAX,
	LNK.RENT_AREA,
	LNK.PAYMENT_FREQUENCY,
	STATUS.CONTRACT_DTM_FINISH,
	#HYP.SESSION_N 
from	((((DEV_DB_ODI.T_RENT_CONTRACT_COND_SNST    COND INNER JOIN DEV_DB_ODI.T_RENT_OBJECT_LNK_SNST    LNK ON COND.RENT_CONTRACT_COND_ID=LNK.RENT_CONTRACT_COND_ID and 
cond.IS_VERIFIED = 1 and 
cond.DELETION_MARK = 0) LEFT OUTER JOIN DEV_DB_ODI.T_RENT_MULTIMEMB_CT_SNST    MULT ON COND.CT_CONTRACT_ID=MULT.CT_CONTRACT_ID) LEFT OUTER JOIN (

select 	
	RENT_CT_STATUS_LNK_SNST.CT_CONTRACT_ID    CT_CONTRACT_ID,	min(RENT_CT_STATUS_LNK_SNST.CONTRACT_DTM)    CONTRACT_DTM_FINISH 
from	DEV_DB_ODI.T_RENT_CT_STATUS_LNK_SNST   RENT_CT_STATUS_LNK_SNST
where	(1=1)

And (RENT_CT_STATUS_LNK_SNST.IS_ACTUAL in ('Расторгнут','ОкончившийСрокДействия'))
Group By RENT_CT_STATUS_LNK_SNST.CT_CONTRACT_ID

)    STATUS ON COND.CT_CONTRACT_ID=STATUS.CT_CONTRACT_ID) LEFT OUTER JOIN DEV_DB_ODI.T_RENT_ADDITIONAL_INFO_LNK_SNST    INF ON COND.RENT_CONTRACT_COND_ID=INF.RENT_CONTRACT_COND_ID) LEFT OUTER JOIN DEV_DB_ODI.T_CURRENCY_SNST    CUR ON coalesce(LNK.CURRENCY_ID,3) = CUR.CURRENCY_ID, (

select 	
	V_R.DIVISION_ID    DIVISION_ID,	max(coalesce(NULLIF(V_R.RENT_SUM, 0),NULLIF(V_R.RENT_SUM_MAX, 0),NULLIF(V_R.RENT_SUM_MIN, 0)))    RENT_SUM_MAX,	3402986    ACCOUNT_ID,	V_R.CNTR_KIS_ID    CNTR_KIS_ID,	V_R.RENT_CONTRACT_COND_ID    RENT_CONTRACT_COND_ID
from	DEV_DB_ODI.T_RENT_TURNOVER_FEE_SNST   V_R, DEV_DB_HYP.V_MONTHS   V_MONTHS
where	(1=1)

And (V_MONTHS.MONTH_ID between #HYP.BEGIN_MONTH and #HYP.END_MONTH)
 And (V_MONTHS.MONTH_ID between to_month_id(cast(V_R.BEGIN_DTM as date)) and to_month_id(cast(V_R.END_DTM as date)))
 And (V_R.CALC_TYPE='ФиксированнаяСумма')
Group By V_R.DIVISION_ID,
 V_R.CNTR_KIS_ID,
 V_R.RENT_CONTRACT_COND_ID


UNION
select 	
	V_R.DIVISION_ID    DIVISION_ID,	min(coalesce(NULLIF(V_R.RENT_SUM, 0),NULLIF(V_R.RENT_SUM_MAX, 0),NULLIF(V_R.RENT_SUM_MIN, 0)))    RENT_SUM_MAX,	3402985    ACCOUNT_ID,	V_R.CNTR_KIS_ID    CNTR_KIS_ID,	V_R.RENT_CONTRACT_COND_ID    RENT_CONTRACT_COND_ID
from	DEV_DB_ODI.T_RENT_TURNOVER_FEE_SNST   V_R, DEV_DB_HYP.V_MONTHS   V_MONTHS
where	(1=1)

And (V_MONTHS.MONTH_ID between #HYP.BEGIN_MONTH and #HYP.END_MONTH)
 And (V_MONTHS.MONTH_ID between to_month_id(cast(V_R.BEGIN_DTM as date)) and to_month_id(cast(V_R.END_DTM as date)))
 And (V_R.CALC_TYPE='ФиксированнаяСумма')
Group By V_R.DIVISION_ID,
 V_R.CNTR_KIS_ID,
 V_R.RENT_CONTRACT_COND_ID


UNION
select 	
	V_R.DIVISION_ID    DIVISION_ID,	avg(coalesce(NULLIF(V_R.RENT_SUM, 0),NULLIF(V_R.RENT_SUM_MAX, 0),NULLIF(V_R.RENT_SUM_MIN, 0)))    RENT_SUM_MAX,	3402982    ACCOUNT_ID,	V_R.CNTR_KIS_ID    CNTR_KIS_ID,	V_R.RENT_CONTRACT_COND_ID    RENT_CONTRACT_COND_ID
from	DEV_DB_ODI.T_RENT_TURNOVER_FEE_SNST   V_R, DEV_DB_HYP.V_MONTHS   V_MONTHS
where	(1=1)

And (V_R.CALC_TYPE='Процент')
 And (V_MONTHS.MONTH_ID between #HYP.BEGIN_MONTH and #HYP.END_MONTH)
 And (V_MONTHS.MONTH_ID between to_month_id(cast(V_R.BEGIN_DTM as date)) and to_month_id(cast(V_R.END_DTM as date)))
Group By V_R.DIVISION_ID,
 V_R.CNTR_KIS_ID,
 V_R.RENT_CONTRACT_COND_ID

)   V_RENT_MM 
where	(1=1)
 And (COND.RENT_CONTRACT_COND_ID=V_RENT_MM.RENT_CONTRACT_COND_ID)
17 сен 19, 08:08    [21972107]     Ответить | Цитировать Сообщить модератору
 Re: вывод макс имин значений в зависимости от кол-ва записей по объекту  [new]
aleks222
Member

Откуда:
Сообщений: 985
Очевидно ж, Ватсон.
Написать в where (если одно, то не выводить).
17 сен 19, 08:15    [21972112]     Ответить | Цитировать Сообщить модератору
 Re: вывод макс имин значений в зависимости от кол-ва записей по объекту  [new]
Romanov-krd
Member

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

что то не понятно как. К примеру вот в этом случае должно выводится только одно значение с account_id= 3402986

К сообщению приложен файл. Размер - 11Kb
17 сен 19, 08:22    [21972115]     Ответить | Цитировать Сообщить модератору
 Re: вывод макс имин значений в зависимости от кол-ва записей по объекту  [new]
Romanov-krd
Member

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

но если значения в поле rent_sum_max разные то оба значения
17 сен 19, 08:23    [21972118]     Ответить | Цитировать Сообщить модератору
 Re: вывод макс имин значений в зависимости от кол-ва записей по объекту  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20536
В той половинке UNION, где выбирается минимальное, дополнительно написать HAVING COUNT(что-то)>1
17 сен 19, 08:46    [21972126]     Ответить | Цитировать Сообщить модератору
 Re: вывод макс имин значений в зависимости от кол-ва записей по объекту  [new]
Romanov-krd
Member

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

С having не получиться там 2 join таблицы и переменные задаются #HYP.BEGIN_MONTH and #HYP.END_MONTH
т.е. они могут быть заданы 201901-201912 к примеру и выборка будет 12 записей

select 	
	V_R.DIVISION_ID    DIVISION_ID,	max(coalesce(NULLIF(V_R.RENT_SUM, 0),NULLIF(V_R.RENT_SUM_MAX, 0),NULLIF(V_R.RENT_SUM_MIN, 0)))    RENT_SUM_MAX,	3402986    ACCOUNT_ID,	V_R.CNTR_KIS_ID    CNTR_KIS_ID,	V_R.RENT_CONTRACT_COND_ID    RENT_CONTRACT_COND_ID
from	DEV_DB_ODI.T_RENT_TURNOVER_FEE_SNST   V_R, DEV_DB_HYP.V_MONTHS   V_MONTHS
where	(1=1)

And (V_MONTHS.MONTH_ID between #HYP.BEGIN_MONTH and #HYP.END_MONTH)
 And (V_MONTHS.MONTH_ID between to_month_id(cast(V_R.BEGIN_DTM as date)) and to_month_id(cast(V_R.END_DTM as date)))
 And (V_R.CALC_TYPE='ФиксированнаяСумма')
Group By V_R.DIVISION_ID,
 V_R.CNTR_KIS_ID,
 V_R.RENT_CONTRACT_COND_ID
17 сен 19, 09:24    [21972145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить