2014-09-25 57 views
1

我有一个表ValuationHistory有以下的列加入本身的表

Code | ValuationDate | NetAssetValue | PricePerShare | Subscriptions | Redemptions 
ABC | 2014-06-30 | 12546.50  | 100.23  | 60   | 70 
CEF | 2014-06-30 | 10025.20  | 120.50  | 30   | 20 
ABC | 2014-07-31 | 12505.50  | 101.50  | 40   | 60 
ABC | 2014-08-31 | 13051.41  | 102.50  | 35   | 70 

现在,用户将选择从一个aspx页面一个估值日期和代码。我想写一个SQL查询,将之前由用户

Code | BeginningEquity | Subscriptions | Redemptions | EndingEquity 

选择的评估基准日给我用下面列的报告所有估值日期在哪里

  • Code是选择的代码用户
  • BeginningEquityNetAssetValue前一估值
  • Subscriptions是直线前进
  • Redemptions是直线前进
  • EndingEquity是在valuationDate

我首先创建了一个名为@ValDates表变量,并得到了所有的估值日期,该临时表的NetAssetValue。然后我做了@ValDatesValuationHistory表的连接。

但我收到以下查询错误。该错误信息是:

子查询返回的多个值

可能有人帮我写在一个更好的办法

SELECT (SELECT NetAssetValue 
     FROM ValuationHistory 
     WHERE ValuationDate IN (SELECT Max(ValuationDate) 
           FROM ValuationHistory 
           WHERE ValuationDate < nd.ValuationDate)), 
     Subscriptions, 
     Redemptions, 
     EndingEquity 
FROM ValuationHistory vh 
     INNER JOIN @ValDates vd 
       ON vh.ValuationDate = vd.ValuationDate 
WHERE vh.Code = @Code 
     AND vh.ValuationDate < = @ValuationDate 
+0

'SELECT TOP 1 NetAssetValue'? – 2014-09-25 12:21:00

+0

谢谢蒂姆,首先正确地格式化我的问题。 “Top 1”修复了我的子查询返回了多个值的错误,但现在看起来BeginningEquity和EndingEquity的值相同 – binpro 2014-09-25 12:35:36

+0

您希望为样本数据列表输出什么? – EricZ 2014-09-25 14:55:13

回答

0

此查询我不是对你的要求很清楚。根据描述,您可以尝试开始查询,如下

DECLARE @Code VARCHAR(10) = 'ABC' 
     ,@ValuationDate date = '2014-07-31' 

;WITH cte AS (
    SELECT 
    rn = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY ValuationDate), * 
    FROM ValuationHistory 
) 
SELECT 
    c1.Code, 
    c2.NetAssetValue AS BeginningEquity, 
    c2.ValuationDate AS BeginningDate, 
    c1.NetAssetValue AS EndingEquity, 
    c1.ValuationDate AS EndingDate, 
    c1.[Subscriptions], 
    c1.[Redemptions] 
from cte c1 
LEFT JOIN cte c2 
    ON c1.Code = c2.Code 
    AND c2.rn = c1.rn - 1 
WHERE c1.Code = @Code 
AND c1.ValuationDate < = @ValuationDate 

SQL Fiddle Demo

+0

谢谢Eric ...让我试试这个 – binpro 2014-09-25 15:44:54