请问如何在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
非常感谢!
答案 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
)
在其他答案中使用表格和数据 将会返回