SQL Query显示多个项目的时间顺序数据

时间:2013-10-11 14:04:30

标签: sql ms-access pivot

我有一张表如下:

Date, Security_Name, Price
1/1/00, AAPL, 100
1/1/00, BBRY, 200
...
1/2/00, AAPL, 101
1/2/00, BBRY, 195
...

我正在尝试编写一个显示此内容的查询:

Date, Price_AAPL, Price_BBRY
1/1/00, 100, 200
1/2/00, 101, 195

我试过这个问题...

SELECT Date, Price
FROM Table
WHERE Security_Name = "AAPL" OR Security_Name = "BBRY"

但是我得到的结果就像原来的堆叠表一样。我想以某种方式重复另一行,这超出了我的能力。

2 个答案:

答案 0 :(得分:1)

在Access 2007中使用示例数据,下面的查询为我提供了此结果集。它仅与列名称中的请求输出不同。如果这是一个问题,您可以保存我的查询并将其用作另一个查询的数据源,您可以根据需要对列名称进行别名。

Date      AAPL BBRY
1/1/2000   100  200
1/2/2000   101  195

这是我查询中的SQL。如果您将表名替换为 YourTable 后它适用于您,那就太棒了。但是,您可能会发现使用Access“交叉表查询向导”尝试从头开始创建自己的类似查询很有用。这是一个有用的向导。 : - )

TRANSFORM Sum(y.Price) AS SumOfPrice
SELECT y.Date
FROM YourTable AS y
WHERE (((y.Security_Name) In ("AAPL","BBRY")))
GROUP BY y.Date
PIVOT y.Security_Name;

答案 1 :(得分:0)

试试这个

WITH t2(dt) AS
(SELECT DISTINCT dt FROM t1)
SELECT
dt,
Price_AAPL = (SELECT price FROM t1 b WHERE b.dt = a.dt AND b.security_name = 'AAPL'),
Price_BBRY = (SELECT price FROM t1 c WHERE c.dt = a.dt AND c.security_name = 'BBRY')
FROM t2 a

没有WITH子句

SELECT
dt,
Price_AAPL = (SELECT price FROM t1 b WHERE b.dt = a.dt AND b.security_name = 'AAPL'),
Price_BBRY = (SELECT price FROM t1 c WHERE c.dt = a.dt AND c.security_name = 'BBRY')
FROM (SELECT DISTINCT dt FROM t1) a