powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом
7 сообщений из 7, страница 1 из 1
Прошу помощи с запросом
    #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
Прошу помощи с запросом
    #40052704
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
COALESCE(region, MAX(region) OVER (PARTITION BY postcode))
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #40052705
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока пришел к такому
Код: plsql
1.
2.
3.
4.
SELECT 
a.* 
 , max(region) over(partition  BY postcode ) as region_new
 FROM a
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #40052706
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

спасибо!
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #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
Прошу помощи с запросом
    #40052709
Moss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
Благодарю!
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #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
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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