多列成行

问题描述 投票:0回答:1

我需要什么查询来改变结果

来自

键值 属性1 价值1 属性2 价值2 属性3 价值3 属性4 价值4
12345 abc 54321 定义 是的 没有 jkl 67890

**致**

键值 属性 价值
12345 属性1 值1
12345 属性2 值2
12345 属性3 值3
12345 属性4 值4

这是我对第一个表的查询

选择键值、属性1、值1、属性2、值2、属性3、值3、属性4、值4、属性5、值5 来自表A

我使用了 UNION ALL,但它显着减慢了进程,所以我不想使用 UNION ALL。

sql dataframe amazon-redshift data-manipulation dbeaver
1个回答
0
投票

其他方式(ORACLE):

select a.key_value
    , (
        case
            when b.rno = 1 then a.Attribute1
            when b.rno = 2 then a.Attribute2
            when b.rno = 3 then a.Attribute3
            when b.rno = 4 then a.Attribute4
        end
    ) as Attribute
    , (
        case
            when b.rno = 1 then a.Value1
            when b.rno = 2 then a.Value2
            when b.rno = 3 then a.Value3
            when b.rno = 4 then a.Value4
        end
    ) as Value
from (
    select '12345' as key_value, 'abc' as Attribute1,   '54321' as Value1, 'def' as Attribute2, 'Yes' as Value2, 'ghi' as Attribute3, 'No' as Value3, 'jkl' as Attribute4, '67890' as Value4 from dual
) a
cross join (
    select 1 as rno from dual
    union all
    select 2 as rno from dual
    union all
    select 3 as rno from dual
    union all
    select 4 as rno from dual
) b
;    
© www.soinside.com 2019 - 2024. All rights reserved.