我有一张表如下:
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"
但是我得到的结果就像原来的堆叠表一样。我想以某种方式重复另一行,这超出了我的能力。
答案 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