gpt4 book ai didi

SQL: "Reverse"转置表

转载 作者:行者123 更新时间:2023-11-29 18:39:30 25 4
gpt4 key购买 nike

我从下表中看到了很多关于转置的问题...

scanid | region | volume
-------------------------
1 A 34.4
1 B 32.1
1 C 29.1
2 A 32.4
2 B 33.2
2 C 35.6

到此表。

scanid | A_volume | B_volume | C_volume
----------------------------------------
1 34.4 32.1 29.1
2 32.4 33.2 35.6

但是,我需要做相反的事情,并且很难尝试解决这个问题。有人可以帮忙吗?

谢谢。

最佳答案

不清楚如何恢复“A”、“B”、“C”值,所以我只是添加它们

准备:

t=# create table s188 (scanid int,a float, b float,c float);
CREATE TABLE
t=# insert into s188 select 1,2,3,4;
INSERT 0 1
t=# insert into s188 select 2,12,13,14;
INSERT 0 1
t=# select * from s188;
scanid | a | b | c
--------+----+----+----
1 | 2 | 3 | 4
2 | 12 | 13 | 14
(2 rows)

选择:

t=# with a as (
select scanid,unnest(array[a,b,c]) from s188
)
select scanid,chr((row_number() over (partition by scanid))::int + 64),unnest
from a;
scanid | chr | unnest
--------+-----+--------
1 | A | 2
1 | B | 3
1 | C | 4
2 | A | 12
2 | B | 13
2 | C | 14
(6 rows)

来自 a_horse_with_no_name 的更简洁的解决方案

t=# with a as (
select scanid, x.*
from s188, unnest(array[a,b,c]) with ordinality as x(volume,idx)
)
select scanid,
chr(idx::int + 64) as region,
volume
from a;
scanid | region | volume
--------+--------+--------
1 | A | 2
1 | B | 3
1 | C | 4
2 | A | 12
2 | B | 13
2 | C | 14
(6 rows)

关于SQL: "Reverse"转置表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039849/

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