2014-03-28 18 views
0

我知道這個問題已被多次詢問,並且我已經閱讀過這些線程以獲得我現在的位置,但這些解決方案似乎沒有工作。我需要有一個運行總和我ExpectedAmount的...正在運行總共SQL服務器 - AGAIN

我有如下表:

+--------------+----------------+ 
| ExpectedDate | ExpectedAmount | 
+--------------+----------------+ 
|   1 |  2485513 | 
|   2 |   526032 | 
|   3 |   342041 | 
|   4 |   195807 | 
|   5 |   380477 | 
|   6 |   102233 | 
|   7 |   539951 | 
|   8 |   107145 | 
|   10 |   165110 | 
|   11 |   18795 | 
|   12 |   27177 | 
|   13 |   28232 | 
|   14 |   154631 | 
|   15 |  5566585 | 
|   16 |   250814 | 
|   17 |   90444 | 
|   18 |   105424 | 
|   19 |   62132 | 
|   20 |  1799349 | 
|   21 |   303131 | 
|   22 |   459464 | 
|   23 |   723488 | 
|   24 |   676514 | 
|   25 |  17311911 | 
|   26 |  4876062 | 
|   27 |  4844434 | 
|   28 |  4039687 | 
|   29 |  1418648 | 
|   30 |  4366189 | 
|   31 |  9028836 | 
+--------------+----------------+ 

我有以下SQL:

SELECT a.ExpectedDate, a.ExpectedAmount, (SELECT SUM(b.ExpectedAmount) 
         FROM UnpaidManagement..Expected b 
         WHERE b.ExpectedDate <= a.ExpectedDate) 
FROM UnpaidManagement..Expected a 

上面的SQL的結果是這個:

+--------------+----------------+--------------+ 
| ExpectedDate | ExpectedAmount | RunningTotal | 
+--------------+----------------+--------------+ 
|   1 |  2485513 |  2485513 | 
|   2 |   526032 |  9480889 | 
|   3 |   342041 |  46275618 | 
|   4 |   195807 |  59866450 | 
|   5 |   380477 |  60246927 | 
|   6 |   102233 |  60349160 | 
|   7 |   539951 |  60889111 | 
|   8 |   107145 |  60996256 | 
|   10 |   165110 |  2650623 | 
|   11 |   18795 |  2669418 | 
|   12 |   27177 |  2696595 | 
|   13 |   28232 |  2724827 | 
|   14 |   154631 |  2879458 | 
|   15 |  5566585 |  8446043 | 
|   16 |   250814 |  8696857 | 
|   17 |   90444 |  8787301 | 
|   18 |   105424 |  8892725 | 
|   19 |   62132 |  8954857 | 
|   20 |  1799349 |  11280238 | 
|   21 |   303131 |  11583369 | 
|   22 |   459464 |  12042833 | 
|   23 |   723488 |  12766321 | 
|   24 |   676514 |  13442835 | 
|   25 |  17311911 |  30754746 | 
|   26 |  4876062 |  35630808 | 
|   27 |  4844434 |  40475242 | 
|   28 |  4039687 |  44514929 | 
|   29 |  1418648 |  45933577 | 
|   30 |  4366189 |  50641807 | 
|   31 |  9028836 |  59670643 | 
+--------------+----------------+--------------+ 

你可以從前面的幾個值已經知道,數學是全部關閉,但然後在s ome分數加起來?!我太困惑了!有人可以請我指出另一種解決方案,或者我在哪裏出錯了?

我使用SQL Server 2008的

回答

4

這是因爲varchar類型的ExpectedDate列。試試這個:

SELECT a.ExpectedDate, a.ExpectedAmount, (SELECT SUM(b.ExpectedAmount) 
         FROM UnpaidManagement..Expected b 
         WHERE CAST(b.ExpectedDate as int) <= CAST(a.ExpectedDate as int)) 
FROM UnpaidManagement..Expected a 

請注意,它可能是低效的查詢。

+0

噢你CHAMP!這確實是VARCHAR,是呀!非常感謝...這整理出來。 – Mike

0

我認爲這會工作:

SELECT a.ExpectedDate, 
     a.ExpectedAmount, 
     SUM(b.ExpectedAmount) RuningTotal 
FROM UnpaidManagement..Expected a 
LEFT JOIN UnpaidManagement..Expected b 
    ON CAST(b.ExpectedDate as int) <= CAST(a.ExpectedDate as int) 
GROUP BY a.ExpectedDate, a.ExpectedAmount 

AND:

SELECT a.ExpectedDate, 
     a.ExpectedAmount, 
     c.RuningTotal 
FROM UnpaidManagement..Expected a 
CROSS APPLY (
    SELECT SUM(b.ExpectedAmount) AS RuningTotal 
    FROM UnpaidManagement..Expected b 
    WHERE CAST(b.ExpectedDate as int) <= CAST(a.ExpectedDate as int) 
) c