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

如何在DB2SQL中将1列和2行转换为2列和1行,db2,Db2,请问如何在DB2上实现1列2行到2列1行 例如: 但是我想 VAR1,VAR2 ----------- 12 ,57 非常感谢 使用子字符串和别名 SELECT SUBSTR(VAR, 1,LOCATE(' ',VAR)-1) as VAR1 , SUBSTR(VAR, LOCATE(' ',VAR)+1) as VAR2 FROM YOURTABLE; 基本上是在空间上突破,如果你有固定长度,你可以不用定位就使用。有很多方法可以做到这一点。如果您使用的是DB2LUW11

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

例如:

但是我想

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

非常感谢

使用子字符串和别名

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

基本上是在空间上突破,如果你有固定长度,你可以不用定位就使用。

有很多方法可以做到这一点。如果您使用的是DB2LUW11.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

通常,将行“透视”到列的最佳方法是在
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
使用我的另一个答案中的表格和数据
哪个将返回

您的意思是要转置数据吗?我假设“12 57”应该有两个值之间的回车;请编辑问题以澄清。另外,请从标题中删除DB2标记(标题的StackOverflow标准)。无论如何,看起来它可能有用。如果你需要一个更一般的答案,请改进你的问题,如果没有,请提高投票/评分作为答案谢谢,伙计,我试过了,但没有得到我想要的结果:)
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