我在常规表之外的SQL Server中创建一个View表,需要在其中添加额外的列购买日期(X)。这就是结果,而常规表只是没有X列而已。
+----+-------------+----------+--------+-----------+------------+-------------------+
| ID | Item | Quantity | Price | Date | Category | PURCHASE DATE (X) |
+----+-------------+----------+--------+-----------+------------+-------------------+
| 12 | BOND A 5% | 40 | $1.25 | 2/20/2012 | BUY | |
| 11 | BOND A 5% | 40 | $1.25 | 5/1/2013 | INT INCOME | |
| 10 | BOND A 5% | 40 | $1.25 | 9/23/2013 | SELL | |
| 9 | BOND A 5% | 100 | $3 | 6/30/2015 | BUY | |
| 8 | BOND A 5% | 100 | 0.05 | 2/1/2016 | INT INCOME | |
| 7 | BOND A 5% | 100 | 0.05 | 2/1/2017 | INT INCOME | |
| 6 | BOND A 5% | 100 | 0.05 | 2/1/2018 | INT INCOME | |
| 5 | BOND A 5% | 100 | $5 | 6/30/2018 | SELL | |
| 4 | BOND B 7.5% | 500 | $10 | 8/24/2013 | BUY | |
| 3 | BOND B 7.5% | 500 | $10 | 3/1/2014 | INT INCOME | |
| 2 | BOND B 7.5% | 500 | $10 | 3/2/2015 | INT INCOME | |
| 1 | BOND B 7.5% | 500 | $10 | 3/31/2018 | SELL | |
+----+-------------+----------+--------+-----------+------------+-------------------+
如何使PURCHASE DATE (X)
列等于最新Date
行的BUY
列,并具有匹配的Item
值(基于Date
比ID
)?
预期结果:
+----+-------------+----------+--------+-----------+------------+-------------------+
| ID | Item | Quantity | Price | Date | Category | PURCHASE DATE (X) |
+----+-------------+----------+--------+-----------+------------+-------------------+
| 12 | BOND A 5% | 40 | $1.25 | 2/20/2012 | BUY | 2/20/2012 |
| 11 | BOND A 5% | 40 | $1.25 | 5/1/2013 | INT INCOME | 2/20/2012 |
| 10 | BOND A 5% | 40 | $1.25 | 9/23/2013 | SELL | 2/20/2012 |
| 9 | BOND A 5% | 100 | $3 | 6/30/2015 | BUY | 6/30/2015 |
| 8 | BOND A 5% | 100 | 0.05 | 2/1/2016 | INT INCOME | 6/30/2015 |
| 7 | BOND A 5% | 100 | 0.05 | 2/1/2017 | INT INCOME | 6/30/2015 |
| 6 | BOND A 5% | 100 | 0.05 | 2/1/2018 | INT INCOME | 6/30/2015 |
| 5 | BOND A 5% | 100 | $5 | 6/30/2018 | SELL | 6/30/2015 |
| 4 | BOND B 7.5% | 500 | $10 | 8/24/2013 | BUY | 8/24/2013 |
| 3 | BOND B 7.5% | 500 | $10 | 3/1/2014 | INT INCOME | 8/24/2013 |
| 2 | BOND B 7.5% | 500 | $10 | 3/2/2015 | INT INCOME | 8/24/2013 |
| 1 | BOND B 7.5% | 500 | $10 | 3/31/2018 | SELL | 8/24/2013 |
+----+-------------+----------+--------+-----------+------------+-------------------+
答案 0 :(得分:1)
这回答了问题的原始版本。
这是您想要的吗?
create view v_t as
select t.*,
(case when item = 'Bond A 5%' then '2015-06-30' end) as [PURCHASE DATE (X)]
from t;
答案 1 :(得分:0)
因此,这几乎是我为解决此问题而做的,以防万一可以帮助某人:
create view A_T as
select A.*,
(SELECT TOP 1 T.Date FROM MainTable T WHERE T.Item=A.Item AND T.Client=A.Client AND Category='BUY' ORDER BY 1 DESC) AS [PURCHASE DATE (X)]
from MainTable A;
希望有帮助