在其他表行中创建基于列的View表

时间:2018-08-07 15:06:46

标签: sql sql-server

我在常规表之外的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值(基于DateID)?

预期结果:

+----+-------------+----------+--------+-----------+------------+-------------------+ | 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 | +----+-------------+----------+--------+-----------+------------+-------------------+

2 个答案:

答案 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;

希望有帮助