Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Развернуть простую таблицу в сводную / 7 сообщений из 7, страница 1 из 1
02.01.2022, 21:18
    #40124506
onlyjoost
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
Добрый день.
Помогите пожалуйста реализоваться запрос, к сожалению, пока не хватает опыта, а всё что нахожу про сводные таблицы не подходит, так как все примеры с цифрами в значениях.. а нужен текст.

Артикул Регион Статус Категория1МоскваПод запрос Памперсы1СпбВ наличииВода

Сделать так:
Артикул Москва Спб Москва Спб1 Под запрос В наличии Памперсы Вода

Заранее благодарен.
...
Рейтинг: 0 / 0
02.01.2022, 22:50
    #40124518
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
onlyjoost,

Поиск по ключевому слову PIVOT

памятка:
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?
Студентам, желающим помощи

1) Полная постановка задачи (без сокращений)

2) Подготовьте тестовые данные, лучше в виде with
пример (не ваш случай) в конце

3) Покажите что сделали, что получили, без сокращений. ( лучше не в виде screenshot)

4) используйте Тэги, читать код без них неудобно, правильно оформляйте сообщение

Пример подготовленных данных, запроса и вывода.
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
-- table 1 with column list
with user_tab(user_id,user_name,registry_date) as (
select 1,'Bob',to_date('11.02.1921 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 2,'Max',to_date('11.02.1922 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual union all
select 3,'Jon',to_date('11.02.1923 23:04:44','DD.MM.YYYY HH24:MI:SS') from dual
)
-- table 2 with column list
,user_post(post_id,user_id,parent_post_id,post_date,message) as (
select 100,1,null,to_date('11.02.1923 23:04:00','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 101,2,100,to_date('11.02.1923 23:05:23','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 102,3,100,to_date('11.02.1923 23:05:35','DD.MM.YYYY HH24:MI:SS'),'Hi' from dual union all
select 103,1,102,to_date('11.02.1923 23:06:00','DD.MM.YYYY HH24:MI:SS'),'How are you' from dual union all
select 104,2,102,to_date('11.02.1923 23:07:05','DD.MM.YYYY HH24:MI:SS'),'All right!' from dual union all
select 105,1,101,to_date('11.02.1923 23:06:21','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 106,1,104,to_date('11.02.1923 23:04:37','DD.MM.YYYY HH24:MI:SS'),'Bye' from dual union all
select 107,2,null,to_date('11.02.1923 23:08:56','DD.MM.YYYY HH24:MI:SS'),'Hmm' from dual
)
select
rpad(to_char(p.post_date,'YYYY-MM-DD HH24:MI:SS  '),20+level*2,' ')||u.user_name||': '||p.message as txt
from 
 user_post p
 join user_tab  u on ( p.user_id = u.user_id)
where p.post_date >= u.registry_date
start with p.parent_post_id is null 
connect by prior p.post_id=p.parent_post_id 
;

TXT
--------------------------------------------------------------------------------
1923-02-11 23:04:00   Bob: Hi
1923-02-11 23:05:23     Max: Hi
1923-02-11 23:06:21       Bob: Bye
1923-02-11 23:05:35     Jon: Hi
1923-02-11 23:06:00       Bob: How are you
1923-02-11 23:07:05       Max: All right!
1923-02-11 23:04:37         Bob: Bye
1923-02-11 23:08:56   Max: Hmm

8 rows selected.
...
Рейтинг: 0 / 0
02.01.2022, 23:00
    #40124519
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
onlyjoost
все примеры с цифрами в значениях.. а нужен текст.
С текстом там всё то же самое плюс-минус
...
Рейтинг: 0 / 0
03.01.2022, 22:38
    #40124599
onlyjoost
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
.
...
Рейтинг: 0 / 0
03.01.2022, 22:41
    #40124600
onlyjoost
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
Никанор Кузьмич
onlyjoost
все примеры с цифрами в значениях.. а нужен текст.
С текстом там всё то же самое плюс-минус


Поиском конечно пользовался, просто мой поиск свел к тому что PIVOT работает только с агрегированными значениями, а у меня надо текст подставить..соответственно код ругается


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * FROM
(
  SELECT item_num, status, region 
  FROM vitrina
)
PIVOT
(
  status  -- как тут обозначить что мне не нужен avg sum и т.д.
  FOR region IN (0, 1, 2)
)



ошибка:
SQL Error [56902] [99999]: ORA-56902: внутри операции среза ожидается агрегативная функция
...
Рейтинг: 0 / 0
03.01.2022, 23:31
    #40124610
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
onlyjoost
Поиском конечно пользовался, просто мой поиск свел к тому что PIVOT работает только с агрегированными значениями
Правильно, PIVOT именно для агрегирования и придумали. Агрегатная функция для работы с текстом - listagg.
В крайнем случае, min и max тоже вполне работают с текстом.
...
Рейтинг: 0 / 0
04.01.2022, 10:22
    #40124621
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Развернуть простую таблицу в сводную
onlyjoost,

может ли появится еще один регион, напр Минск? Что тогда?

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Развернуть простую таблицу в сводную / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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