Как объединить 1 столбец и 2 строки в 2 столбца и 1 строку в Db2 SQL - PullRequest
0 голосов
/ 25 сентября 2018

Как добиться от 1 столбца 2 строки до 2 столбца 1 строки в DB2, пожалуйста?

Например:

select value from <tablename> WHERE name='VAR' ORDER BY effectivedate DESC FETCH FIRST 2 ROWS ONLY;

, что дает

VAR
----
12
57

Но я хочуполучить

VAR1,VAR2
-----------
12  ,57

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Есть много способов сделать это.Если вы используете Db2 LUW 11.1 или выше, это будет работать

SELECT * FROM TABLE(VALUES 
   ( ( select value from a_table WHERE name='VAR' ORDER BY effectivedate DESC FETCH FIRST 1 ROW ONLY)
   , ( select value from a_table WHERE name='VAR' ORDER BY effectivedate DESC OFFSET 1 ROW FETCH NEXT 1 ROW ONLY )
 )) AS t(VAR1, VAR2)

, и с этой таблицей и данными

create TABLE a_table( value int, name char(3), effectivedate date);
INSERT INTO a_table values (12,'VAR','2018-01-10'),(57,'VAR', '2018-01-09'),(1,'VAR','2018-01-08');

вернет этот результат

VAR1 VAR2
---- ----
  12   57
0 голосов
/ 26 сентября 2018

Как правило, лучший способ "разворачивать" строки в столбцы - агрегировать по CASE операторам.

Например,

SELECT MAX(CASE WHEN RN = 1 THEN value END) AS VAR1
,      MAX(CASE WHEN RN = 2 THEN value END) AS VAR2
,      MAX(CASE WHEN RN = 3 THEN value END) AS VAR3
,      MAX(CASE WHEN RN = 4 THEN value END) AS VAR4
FROM (
    SELECT *, ROW_NUMBER() OVER(ORDER BY effectivedate DESC) AS RN
    FROM a_table T
    )

вернет это

 VAR1 VAR2 VAR3 VAR4
 ---- ---- ---- ----
   12   57    1 NULL

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

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

Использовать подстроку и псевдонимы

SELECT 
    SUBSTR(VAR, 1,LOCATE(' ',VAR)-1) as VAR1
  , SUBSTR(VAR, LOCATE(' ',VAR)+1)   as VAR2
FROM YOURTABLE;

В основном разрыв на пробелах, если у вас фиксированная длина, которую вы можете использовать без определения местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...