DB2 значения, разделенные запятыми, в столбцы - PullRequest
0 голосов
/ 11 июля 2020

В моей таблице есть значения, как показано ниже

Нужен отдельный столбец для каждой запятой

Select Element from Test_check

Element:
Test,Sample,Maiden

Expected Result :

Element:
Test
Sample
Maiden

1 Ответ

1 голос
/ 11 июля 2020

2 варианта, в зависимости от того, что вы пытаетесь сделать.

  1. SP COMMA_TO_TABLE (доступно только в версии 10.1 и выше на LUW)

  2. Рекурсивный запрос

Это может быть один из вариантов

CREATE TABLE TLIST (ID  INTEGER, LISTVALUES VARCHAR(100))
INSERT INTO TLIST VALUES(1, '10,11,12,13,14,15')
INSERT INTO TLIST VALUES(2, '25,26,27,28,29')

select * from tlist

ID          LISTVALUES
----------- ------------------
          1 10,11,12,13,14,15
          2 25,26,27,28,29   

WITH pquery (ID, wordnum, word, remainder)
AS
(
  SELECT base.ID, 1, 
    CASE WHEN LOCATE (',', LISTVALUES) > 0 THEN 
      SUBSTR (LISTVALUES, 1, LOCATE (',', LISTVALUES) - 1)
    ELSE
      LISTVALUES
    END word,
    CASE WHEN locate (',', LISTVALUES) > 0 THEN
      LTRIM (SUBSTR (LISTVALUES, LOCATE (',', LISTVALUES) + 1))
    ELSE
      NULL
    END remainder
  FROM TLIST base 
  
  UNION ALL
  
  SELECT ID, wordnum + 1, 
    CASE WHEN LOCATE (',', remainder) > 0 then 
      SUBSTR (remainder, 1, LOCATE (',', remainder) - 1)
    ELSE
      remainder
    END word,
    CASE WHEN LOCATE (',', remainder) > 0 THEN
      LTRIM (SUBSTR (remainder, LOCATE (',', remainder) + 1))
    ELSE
      NULL
    END remainder
  FROM pquery t0
  WHERE (t0.remainder IS NOT NULL )
    AND (wordnum < 100)
)
SELECT ID, WORD FROM pquery pq order by ID , wordnum;


ID          WORD      
----------- ----------
          1 10        
          1 11        
          1 12        
          1 13        
          1 14        
          1 15        
          2 25        
          2 26        
          2 27        
          2 28        
          2 29        

PS предикат (wordnum < 100) в предложении WHERE необходимо избегать бесконечного l oop, но, конечно, вы можете изменить предел.

С уважением, Самуэль Писарро

...