如何使用SQL将垂直数据转换为水平数据?

前端之家收集整理的这篇文章主要介绍了如何使用SQL将垂直数据转换为水平数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表“项目”与一些相关的项目,像这样:
ID   Rel_ID  Name  RelRank
---  ------  ----  -------
1    1       foo   1
2    1       bar   2
3    1       zam   3
4    2       foo2  1

我正在尝试获取查询,因此具有相同Rel_ID的项目将显示在同一行中,如下所示:

Rel_ID  Name1  Name2  Name3
------  -----  -----  -----
1       foo    bar    zam
2       foo2

我已经尝试多次选择表:

SELECT k.Rel_ID,k.name 'Name1',k2.name 'Name2'
FROM item k,item k2
WHERE k.Rel_ID = k2.Rel_ID

但是这样做失败了.当然有一个转换或查询,可以大大简化流程,我只是错过了,因为我以前没有以这种方式使用sql.我失踪了什么

[编辑:添加的RelRank列,它出现在我的数据中]

解决方法

无论您正在使用的数据库,您尝试实现的概念称为“数据透视表”.

以下是MysqL的一个例子:
http://en.wikibooks.org/wiki/MySQL/Pivot_table

有些数据库具有内置功能,请参阅下面的链接.

sqlServer的:
http://msdn.microsoft.com/de-de/library/ms177410.aspx

甲骨文:
http://www.dba-oracle.com/t_pivot_examples.htm

您可以随时用手创建枢轴.只需选择结果集中的所有聚合,然后从该结果集中选择.请注意,在您的情况下,您可以使用concat将所有名称放入一列(我认为MysqL中是group_concat),因为您不知道有多少个名称与一个rel_id相关.

伪选你的case(我不知道MysqL):

select rel_id,group_concat(name) from item group by rel_id

猜你在找的MsSQL相关文章