Сводные строки Oracle с одинаковым идентификатором - PullRequest
0 голосов
/ 25 октября 2018

У меня есть вопрос, и я могу решить его с помощью разворота, но не могу найти решение.Пожалуйста, помогите мне сделать это.

Таблица

CREATE TABLE table_name ( CUST_ID, RATE ) AS
  SELECT 1, 100 FROM DUAL UNION ALL
  SELECT 1, 200 FROM DUAL UNION ALL
  SELECT 2, 100 FROM DUAL UNION ALL
  SELECT 3, 300 FROM DUAL UNION ALL
  SELECT 4, 200 FROM DUAL UNION ALL
  SELECT 4, 600 FROM DUAL UNION ALL
  SELECT 5, 500 FROM DUAL UNION ALL
  SELECT 6, 800 FROM DUAL UNION ALL
  SELECT 6, 200 FROM DUAL;

Требуемый выход

CUST_ID RATE CUST_ID RATE CUST_ID RATE CUST_ID RATE CUST_ID RATE CUST_ID RATE
------- ---- ------- ---- ------- ---- ------- ---- ------- ---- ------- ----
1       100  2       100  3       300  4       200  5       500  6       800  
1       200                            4       600               6       200  

Пожалуйста, помогите мнерешить это.

1 Ответ

0 голосов
/ 25 октября 2018

Запрос Oracle:

SELECT "1_CUST_ID" AS CUST_ID1,
       "1_RATE"    AS RATE1,
       "2_CUST_ID" AS CUST_ID2,
       "2_RATE"    AS RATE2,
       "3_CUST_ID" AS CUST_ID3,
       "3_RATE"    AS RATE3,
       "4_CUST_ID" AS CUST_ID4,
       "4_RATE"    AS RATE4,
       "5_CUST_ID" AS CUST_ID5,
       "5_RATE"    AS RATE5,
       "6_CUST_ID" AS CUST_ID6,
       "6_RATE"    AS RATE6
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( PARTITION BY cust_id ORDER BY ROWNUM ) AS rn
  FROM   table_name t
)
PIVOT (
  MAX( cust_id ) AS cust_id,
  MAX( rate ) AS rate
  FOR cust_id IN ( 1, 2, 3, 4, 5, 6 )
)

Вывод:

CUST_ID1 RATE1 CUST_ID2 RATE2 CUST_ID3 RATE3 CUST_ID4 RATE4 CUST_ID5 RATE5 CUST_ID6 RATE6
-------- ----- -------- ----- -------- ----- -------- ----- -------- ----- -------- ----- 
1        100   2        100   3        300   4        200   5        500   6        800  
1        200                                 4        600                  6        200  

(Примечание: у вас нет способа упорядочить строки по идентификатору клиента, и запросы не гарантируютсядетерминирован в их упорядочении, поэтому вы можете обнаружить, что значения переключаются в той строке, в которой они находятся, например, если у вас в таблице включено перемещение строк.)

...