Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом / 7 сообщений из 7, страница 1 из 1
11.03.2021, 19:46
    #40052702
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with a as
( SELECT 'Vasya' as name, 123 as postcode , null as region from dual union all
SELECT 'Vasya' as name, 123 as postcode , 10 as region  from dual union all
SELECT 'Vasya' as name, 123 as postcode , null as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , null as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , 15 as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , null as region  from dual  
)
SELECT * FROM a


Необходимо заполнить регион там где его нет.
Если в строке есть связка postcode не пусто и region не пусто, то данный регион нужно проставить туда где его нет с таким же postcode
NAME POSTCODE REGIONVasya 123 Vasya 123 10Vasya 123 Kolya 555 Kolya 555 15Kolya 555
Нужно получить:
NAME POSTCODE REGIONVasya 123 10Vasya 123 10Vasya 123 10Kolya 555 15Kolya 555 15Kolya 555 15
Можно со вспомогательной колонкой, без разницы.
Натолкните на мысль
Спасибо!
...
Рейтинг: 0 / 0
11.03.2021, 19:55
    #40052704
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
COALESCE(region, MAX(region) OVER (PARTITION BY postcode))
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.03.2021, 19:58
    #40052705
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
пока пришел к такому
Код: plsql
1.
2.
3.
4.
SELECT 
a.* 
 , max(region) over(partition  BY postcode ) as region_new
 FROM a
...
Рейтинг: 0 / 0
11.03.2021, 19:58
    #40052706
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
Dimitry Sibiryakov,

спасибо!
...
Рейтинг: 0 / 0
11.03.2021, 19:58
    #40052707
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
Moss,

first_value ignore nulls
Код: plsql
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.
  1  with a as
  2  ( SELECT 'Vasya' as name, 123 as postcode , null as region from dual union all
  3  SELECT 'Vasya' as name, 123 as postcode , 10 as region  from dual union all
  4  SELECT 'Vasya' as name, 123 as postcode , null as region  from dual union all
  5  SELECT 'Kolya' as name, 555 as postcode , null as region  from dual union all
  6  SELECT 'Kolya' as name, 555 as postcode , 15 as region  from dual union all
  7  SELECT 'Kolya' as name, 555 as postcode , null as region  from dual
  8  )
  9  SELECT
 10   a.*
 11   ,first_value(region IGNORE NULLS) over (partition by name,postcode order by region) r
 12   FROM a
 13* order by 1,2
SQL> /

NAME    POSTCODE     REGION          R
----- ---------- ---------- ----------
Kolya        555         15         15
Kolya        555                    15
Kolya        555                    15
Vasya        123         10         10
Vasya        123                    10
Vasya        123                    10

6 rows selected.



ps
max()/min() over

.....
stax
...
Рейтинг: 0 / 0
11.03.2021, 20:02
    #40052709
Moss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
Stax,
Благодарю!
...
Рейтинг: 0 / 0
11.03.2021, 22:50
    #40052737
SenjorPomidor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помощи с запросом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with a as
( SELECT 'Vasya' as name, 123 as postcode , null as region from dual union all
SELECT 'Vasya' as name, 123 as postcode , 10 as region  from dual union all
SELECT 'Vasya' as name, 123 as postcode , null as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , null as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , 15 as region  from dual union all
SELECT 'Kolya' as name, 555 as postcode , null as region  from dual  
)
SELECT name, postcode, nvl(region, (select region from a a1 
where a1.postcode = a2.postcode and a1.region is not null and rownum = 1))  
FROM a a2
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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