如何在Db2 SQL中将1列和2行转换为2列和1行

时间:2018-09-25 18:03:59

标签: db2

请问如何在DB2上实现1列2行到2列1行?

例如:

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 :(得分:0)

使用子字符串和别名

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

基本上是在空间上破坏的,如果您有固定的长度,则可以在不定位的情况下使用。

答案 1 :(得分:0)

有很多方法可以做到这一点。如果您使用的是Db2 LUW 11.1或更高版本,则可以使用

src/main/resources/static/css

以及此表和数据

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');

答案 2 :(得分:0)

通常,将行“透视”为列的最佳方法是在const ratings = [{"food":3},{"food":4},{"food":5},{"food":2}]; const food = ratings.reduce((r, { food }) => r + food , 0) / ratings.length; console.log("FOOD", food)条语句上进行汇总。

例如

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
    )

在其他答案中使用表格和数据 将会返回