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

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

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

Заранее благодарен.
...
Рейтинг: 0 / 0
Развернуть простую таблицу в сводную
    #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
Развернуть простую таблицу в сводную
    #40124519
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onlyjoost
все примеры с цифрами в значениях.. а нужен текст.
С текстом там всё то же самое плюс-минус
...
Рейтинг: 0 / 0
Развернуть простую таблицу в сводную
    #40124599
onlyjoost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.
...
Рейтинг: 0 / 0
Развернуть простую таблицу в сводную
    #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
Развернуть простую таблицу в сводную
    #40124610
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onlyjoost
Поиском конечно пользовался, просто мой поиск свел к тому что PIVOT работает только с агрегированными значениями
Правильно, PIVOT именно для агрегирования и придумали. Агрегатная функция для работы с текстом - listagg.
В крайнем случае, min и max тоже вполне работают с текстом.
...
Рейтинг: 0 / 0
Развернуть простую таблицу в сводную
    #40124621
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onlyjoost,

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

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


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