职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 261|回复: 9

一道有趣的sql题2

[复制链接]
天上智喜 发表于 2011-8-25 10:53 | 显示全部楼层 |阅读模式
无论你在网上找行转列还是列转行,出来的都是行转列。

真正的列转行是要实现以下功能,大家一起动脑思考吧。


year  columnA   columnB   
2009     200       300        
2010     300       400         

变成

column  year data
columnA  2009  200
columnA  2010  300
columnB  2009  300
columnB  2010  400




走就走吧 发表于 2011-8-25 10:54 | 显示全部楼层
create table my_test(
year varchar2(100),
columnA varchar2(100),
columnB varchar2(100)
);
insert into my_test values('2009','200','300');
insert into my_test values('2010','300','400');

SELECT a.aa, a.YEAR, ca DATA
  FROM (SELECT 'columna' aa, YEAR, columna ca
          FROM my_test) a,
       (SELECT 'columnb', YEAR, columnb cb
          FROM my_test) b
WHERE a.YEAR = b.YEAR
UNION ALL
SELECT b.bb, b.YEAR, cb DATA
  FROM (SELECT 'columna' aa, YEAR, columna ca
          FROM my_test) a,
       (SELECT 'columnb' bb, YEAR, columnb cb
          FROM my_test) b
WHERE a.YEAR = b.YEAR;


北大青鸟 发表于 2011-8-25 10:54 | 显示全部楼层
还有,别说网上找不到列转行的例子!多的是!

爱车车 发表于 2011-8-25 10:54 | 显示全部楼层
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR;

整理了一下别名,貌似column不能用作列名

能文能武 发表于 2011-8-25 10:54 | 显示全部楼层
biaobiao520 写道
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR;

整理了一下别名,貌似column不能用作列名



受教了

月上萧萧 发表于 2011-8-25 10:54 | 显示全部楼层
yangguo 写道
biaobiao520 写道
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR;

整理了一下别名,貌似column不能用作列名



受教了


晕。。。
好像直接这么取就可以了。。。
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b

jinchang 发表于 2011-8-25 10:54 | 显示全部楼层
biaobiao520 写道
yangguo 写道
biaobiao520 写道
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a,
       (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b
WHERE a.YEAR = b.YEAR;

整理了一下别名,貌似column不能用作列名



受教了


晕。。。
好像直接这么取就可以了。。。
SELECT a.col , a.YEAR, a.columna DATA
  FROM (SELECT 'columna' col, YEAR, columna
          FROM my_test) a
UNION ALL
SELECT b.col, b.YEAR, B.COLUMNB DATA
  FROM (SELECT 'columnb' col, YEAR, columnb
          FROM my_test) b




哈哈,我刚发短信给你,也是这样。


楠楠 发表于 2011-8-25 10:54 | 显示全部楼层
= =!如果是Oracle用下函数就行了。

芷馨 发表于 2011-8-25 10:55 | 显示全部楼层
java_jing 写道
= =!如果是Oracle用下函数就行了。

什么函数?

楠楠 发表于 2011-8-25 10:55 | 显示全部楼层
楼主, 建议把题目改成任意个Column的列转行,不然得出来的解决方案不怎么通用。  

比如改成一百个Column的列转行, 如果用Union All,写死你。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-28 22:38 , Processed in 0.160287 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表