powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Транспонировать результат запроса при помощи PIVOT
5 сообщений из 5, страница 1 из 1
Транспонировать результат запроса при помощи PIVOT
    #39586983
xaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Люди помогите транспонировать результат запроса
Запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 SELECT
    smena,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P1')) AS P1,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P2')) AS P2,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P3')) AS P3,    
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P4')) AS P4,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'PTP-5')) AS P5,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'PTP-6')) AS P6        
FROM
    smens
WHERE dtime = TRUNC(:dt)    
ORDER BY smena



Выдает:
SMENA P1 P2 P3 P4 P5
1 0 480 0 0 0
2 0 480 0 0 0
3 0 197 0 0 0

Нужно сделать 3 колонки из столбца SMENA, остальные колонки в строки


Сделала
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 select * from
  (
 SELECT
    smena,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P1')) AS P1,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P2')) AS P2,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P3')) AS P3,    
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'P4')) AS P4,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'PTP-5')) AS P5,
    p_RASCHET.Prostoi_time_all("ID", (SELECT "ID" FROM z_left WHERE code_e = 'PTP-6')) AS P6        
FROM
    smens
WHERE dtime = TRUNC(:dt)    
ORDER BY smena
  )
  pivot
  (
  max(p1) sp1,  max(p2) sp2,max(p3) sp3,max(p4) sp4,max(p5) sp5
    for smena in ('1' ,'2' , '3' )
  )



Получила все в одну строк у

P6 '1'_SP1 '1'_SP2 '1'_SP3 '1'_SP4 '1'_SP5 '2'_SP1 '2'_SP2 '2'_SP3 '2'_SP4 '2'_SP5 '3'_SP1 '3'_SP2 '3'_SP3 '3'_SP4 '3'_SP5

0 0 0 480 0 0 0 0 480 0 0 0 0 197 0 0

Как сделать правильно?
...
Рейтинг: 0 / 0
Транспонировать результат запроса при помощи PIVOT
    #39586987
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xalyНужно сделать 3 колонки из столбца SMENA, остальные колонки в строки


еслі я хоть чуть понял
то
unpivot для п1-п5 и pivot для смена

....
stax
...
Рейтинг: 0 / 0
Транспонировать результат запроса при помощи PIVOT
    #39586990
xaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да просто надо перевернуть таблицу:

smena1 smena2 smena3
0 0 0
0 0 0
480 480 197
0 0 0
0 0 0

в вроде делаю как в примерах из документации, почему-то не работает
...
Рейтинг: 0 / 0
Транспонировать результат запроса при помощи PIVOT
    #39587018
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xaly,

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t (smena,p1,p2,p3,p4,p5) as (
  2  select 1,  10,     480,    40,     0,      0 from dual union all
  3  select 2,  20,     480,    0,      50,     0 from dual union all
  4  select 3,  30,     197,    0,      0,      60 from dual
  5  )
  6  ,tt as (
  7  select * from t
  8   UNPIVOT ( v FOR p IN (p1 AS 'p1',p2 AS 'p2',p3 AS 'p3',p4 AS 'p4',p5 AS 'p5'))
  9  )
 10  select * from tt
 11  pivot (sum(v) for smena in (1 as s1,2 as s2, 3 as s3))
 12* order by 1
SQL> /

P          S1         S2         S3
-- ---------- ---------- ----------
p1         10         20         30
p2        480        480        197
p3         40          0          0
p4          0         50          0
p5          0          0         60



.....
stax
...
Рейтинг: 0 / 0
Транспонировать результат запроса при помощи PIVOT
    #39588801
xaly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, Все работает. Спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Транспонировать результат запроса при помощи PIVOT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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