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

ティッカーごとに 1 回ずつ、2 回選択し、結果を外部結合する必要がありますか?

4

3 に答える 3

3

使用しているデータベースに関係なく、達成しようとしていることの概念は「ピボット テーブル」と呼ばれます。

以下は mysql の例です: http://en.wikibooks.org/wiki/MySQL/Pivot_table

一部のデータベースには、そのための機能が組み込まれています。以下のリンクを参照してください。

SQL サーバー: http://msdn.microsoft.com/de-de/library/ms177410.aspx

オラクル: http://www.dba-oracle.com/t_pivot_examples.htm

ピボットはいつでも手動で作成できます。結果セット内のすべての集計を選択し、その結果セットから選択するだけです。

あなたの場合、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

はい、DB にピボット用の SQL 拡張機能がない限り、そうです。Microsoft SQL Server で行う方法は次のとおりです。

于 2012-02-12T12:37:34.500 に答える