Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вывод макс имин значений в зависимости от кол-ва записей по объекту / 6 сообщений из 6, страница 1 из 1
17.09.2019, 08:08
    #39862560
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
Запрос выбирает максимальное минимальное и среднее значение по объекту(подзапрос с union). Но если значение 1 у объекта - выбирает его как максимальное и минимальное. Как сделать чтобы в случае если у объекта одно значение - выводило не макс и мин значение а только макс 1 раз

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
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)
...
Рейтинг: 0 / 0
17.09.2019, 08:15
    #39862563
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
Очевидно ж, Ватсон.
Написать в where (если одно, то не выводить).
...
Рейтинг: 0 / 0
17.09.2019, 08:22
    #39862564
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
aleks222,

что то не понятно как. К примеру вот в этом случае должно выводится только одно значение с account_id= 3402986
...
Рейтинг: 0 / 0
17.09.2019, 08:23
    #39862567
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
Romanov-krd,

но если значения в поле rent_sum_max разные то оба значения
...
Рейтинг: 0 / 0
17.09.2019, 08:46
    #39862574
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
В той половинке UNION, где выбирается минимальное, дополнительно написать HAVING COUNT(что-то)>1
...
Рейтинг: 0 / 0
17.09.2019, 09:24
    #39862584
Romanov-krd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод макс имин значений в зависимости от кол-ва записей по объекту
Akina,

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вывод макс имин значений в зависимости от кол-ва записей по объекту / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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