我有一个表“项目”与一些相关的项目,像这样:
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