假设我将股票价格保存在3列表中,如下所示:
create table stocks(
ticker text,
day int,
price int
);
insert into stocks values ('aapl', 1, 100);
insert into stocks values ('aapl', 2, 104);
insert into stocks values ('aapl', 3, 98);
insert into stocks values ('aapl', 4, 99);
insert into stocks values ('goog', 1, 401);
insert into stocks values ('goog', 2, 390);
insert into stocks values ('goog', 3, 234);
我希望结果看起来像:
day aapl goog
1 100 401
2 104 390
3 98 234
4 99 null
我真的需要选择两次,每个自动收报机一次,然后外部加入结果吗?
答案 0 :(得分:3)
无论您使用何种数据库,您尝试实现的概念都称为“数据透视表”。
这是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),因为您无法知道有多少名称与ticker
相关。
答案 1 :(得分:2)
像这样:
Select day,
MAX(case WHEN ticker = 'aapl' then price end) as 'aapl',
MAX(case WHEN ticker = 'goog' then price end) as 'goog'
From stocks
group by day
答案 2 :(得分:1)
是的,除非您的数据库具有用于数据透视的SQL扩展。 Here's how you do it in Microsoft SQL Server.