2

假设我将股票价格保存在一个 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

我真的需要选择两次,每个股票一次,然后外部加入结果吗?

4

3 回答 3

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.

于 2012-02-12T12:37:16.157 回答
3

像这样:

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

演示

于 2012-02-12T12:39:40.070 回答
1

是的,除非您的数据库具有用于旋转的 SQL 扩展。以下是您在 Microsoft SQL Server 中的操作方法。

于 2012-02-12T12:37:34.500 回答