2014-09-25 63 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