加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:11:00 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表“项目”与一些相关的项目,像这样: ID Rel_ID Name RelRank--- ------ ---- -------1 1 foo 12 1 bar 23 1 zam 34 2 foo2 1 我正在尝试获取查询,因此具有相同Rel_ID的项目将显示在同一行中,如下所示: Rel_ID Name1 Name2 Name3------ ----- -----
我有一个表“项目”与一些相关的项目,像这样:
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读