gpt4 book ai didi

sql - 行到列数据

转载 作者:行者123 更新时间:2023-12-04 20:30:09 25 4
gpt4 key购买 nike

我有名为AA的表。我有3列,即x,y,z
。它只有一排。

select * from aa;

x y z
10 20 30


我想要输出像

10
20
30


我用下面的查询

select x from AA union all select y from AA union all select z from AA ;


它正在提供所需的输出。但是我被告知这不是可行的查询。谁能为我提供最佳解决方案。

最佳答案

您可以使用Oracle的UNPIVOT Clause

SELECT *
FROM AA
UNPIVOT (
value FOR name IN (x AS 'x', y AS 'y', z AS 'z')
);


将产生结果

name    value
---- -----
x 10
y 20
z 30


参见: http://sqlfiddle.com/#!4/b274a/1/0



可以将其推广到更多列吗?由于需要事先知道列的名称,因此您不能使其自动考虑其他列,但是当然可以手动添加更多列。该示例还具有值列以外的其他列:

CREATE TABLE AA (
position NVARCHAR2(50),
x NUMBER(10),
y NUMBER(10),
z NUMBER(10),
t NUMBER(10)
);
INSERT INTO AA (position, x, y, z, t) VALUES ('pos 1', 10, 20, 30, 1);
INSERT INTO AA (position, x, y, z, t) VALUES ('pos 2', 11, 22, 33, 2);
INSERT INTO AA (position, x, y, z, t) VALUES ('pos 3', 34, 45, 56, 3);


您可以使用以下查询:

SELECT *
FROM AA
UNPIVOT (
value FOR coord IN (x AS 'x', y AS 'y', z AS 'z', t as 'time')
);


并得到

POSITION   COORD   VALUE
-------- ----- -----
pos 1 x 10
pos 1 y 20
pos 1 z 30
pos 1 time 1
pos 2 x 11
pos 2 y 22
pos 2 z 33
pos 2 time 2
pos 3 x 34
pos 3 y 45
pos 3 z 56
pos 3 time 3


参见: http://sqlfiddle.com/#!4/47f5f/2/0



如果您确实想动态考虑更多列,则必须检测可用的列并动态创建和执行SQL语句。您不能使用“纯” SQL来做到这一点。

关于sql - 行到列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com