首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表列转换为行

将表列转换为行
EN

Stack Overflow用户
提问于 2019-01-26 12:55:06
回答 3查看 61关注 0票数 0

这张桌子的结构如下。我需要将列转换为行

代码语言:javascript
复制
ID  NAME      2011   2012
1   macbook   2      241
2   macbook   77     214
3   macbook   0      400
4   iphone    442    555
代码语言:javascript
复制
with tbl as (
 select  1 as id, 'macbook' as name, 2 as "2011", 241 as "2012" from dual union
 select  2 as id, 'macbook' as name, 77 as "2011", 214 as "2012" from dual union
 select  3 as id, 'macbook' as name, 0 as "2011", 400 as "2012" from dual union
 select  4 as id, 'iphone' as name, 442 as "2011", 555 as "2012" from dual
)
select * from tbl

我使用Oracle数据库,我试图通过使用un枢轴函数来解决这个问题,但是我对此进行了讨论。

我希望能得到这样的结果

代码语言:javascript
复制
ID  NAME    DATE    SALES
1   macbook 2011    2
1   macbook 2012    241
2   macbook 2011    77
2   macbook 2012    214
3   macbook 2011    0
3   macbook 2012    400
4   iphone  2011    442
4   iphone  2012    555
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-26 13:24:36

试一试:使用un枢轴

代码语言:javascript
复制
with tbl as (
 select  1 as id, 'macbook' as name, 2 as "2011", 241 as "2012" from dual union
 select  2 as id, 'macbook' as name, 77 as "2011", 214 as "2012" from dual union
 select  3 as id, 'macbook' as name, 0 as "2011", 400 as "2012" from dual union
 select  4 as id, 'iphone' as name, 442 as "2011", 555 as "2012" from dual
)
select * from tbl
UNPIVOT (SALES FOR "DATE" IN ("2011" AS '2011', "2012" AS '2012'));

输出:

票数 0
EN

Stack Overflow用户

发布于 2019-01-26 13:10:53

使用两个子查询,每个查询获得每年的结果,然后得到UNION:

代码语言:javascript
复制
select * from (
    select t.id, t.name, '2011' as "date", t."2011" as sales from tbl t  
    union all
    select t.id, t.name, '2012' as "date", t."2012" as sales from tbl t
) t
order by t.id, t.name, t."date"

演示

票数 0
EN

Stack Overflow用户

发布于 2019-01-26 13:15:30

您可以将表与日期列表交叉连接,然后使用解码提取每一行的相关年销售额。

代码语言:javascript
复制
SELECT 
    t.id,
    t.name.
    t.dt "date",
    DECODE(t.dt, 2011, t."2011", 2012, t."2012", 0) sales
FROM mytable t
CROSS JOIN (
    SELECT 2011 dt FROM DUAL
    UNION SELECT 2012 FROM DUAL
) d
ORDER BY 1,2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54378547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档