2011-06-02 91 views
2

我有一個MS Access 2007數據庫,需要爲其創建更新。我想更新表看起來是這樣的:以先前記錄遞增的MS Access更新

CarID WeekOf   NumDataPoints NumWksZeroPoints 
3AA May-14-2011  23    0 
7BB May-14-2011  9    0 

3AA May-21-2011  35    0 
7BB May-21-2011  0    1 

3AA May-28-2011  24 
7BB May-28-2011  0 

我處理可能-28-2011的最新記錄和要點是更新每節車廂與周其沒有數據點的數量。我通過檢查當前的星期點數來做到這一點,如果它有一些點,然後#WeeksZeroPoints被設置爲零,並且如果當前的點數爲零,那麼我將前幾個星期計數並加1。對於我上週我會輸入

0 
    2 

所以我想是這樣

UPDATE tblCars 
SET NumWksZeroPoints = IIF(NumDataPoints<>0, 0, (SELECT MAX(NumWksZeroPoints) AS wzp 
               FROM tblCars AS f 
               WHERE f.CarID=tblCars.CarID AND 
                 f.WeekEnding=#5/21/2011#) + 1 
         ) 
WHERE WeekOf=#5/28/2011#; 

不幸的是像我想的那樣,這並不工作。我認爲我有這個概念,大部分的SQL,我似乎無法使它工作。這是對MS Access,所以我知道的其他一些技巧只是不工作。任何幫助讚賞。

+0

問題的提出是_after_下面評論它是「設計鎖定」。有時候你只需要知道如何以正確的方式來做錯誤的事情...... – RolandTumble 2011-06-02 18:36:53

回答

1

使用您的樣本數據,我跑以下

UPDATE tblcar AS c 
     INNER JOIN tblcar AS previous 
     ON c.carid = previous.carid 
SET c.numwkszeropoints = Iif([previous].[NumWksZeroPoints] = 0, 0, 
            [previous].[NumWksZeroPoints] + 1) 
WHERE c.weekof =#5/28/2011 # 
     AND previous.weekof =#5/21/2011#; 

表之後這個樣子

CarID WeekOf  NumDataPoints NumWksZeroPoints 
----- ---------- ------------- ----------------- 
3AA 05/14/2011 23   0 
7BB 05/14/2011 9    0 
3AA 05/21/2011 35   0 
7BB 05/21/2011 0    1 
3AA 05/28/2011 24   0 
7BB 05/28/2011 0    2 

基本上查詢做了一個自連接返回到前一週,並更新當前一週到前一週的價值+ 1,如果它不是零。

+0

從來沒有這樣做過更新查詢,但它看起來像它會工作。但是我做了一些調整,只是稍微調整了SET c.NumWksZeroPoints = IIF(c.NumDataPoints <> 0,0,[previous]。[NumWksZeroPoints] + 1),因爲更新應該基於當前星期中的數據點數。我會測試並報告我所看到的。 – sinDizzy 2011-06-02 16:46:31

+0

經過測試,這就做了我需要它做的事情。非常感謝你的幫助。我在這個論壇上每天都會學到新的東西。 – sinDizzy 2011-06-03 14:48:43

2

你可以(也可以說應該)做這個查詢,而不更新表。如果您每輛汽車每週捕獲數據點,則您的查詢可以使用日期數學計算汽車沒有數據點的週數。如果有人在運行更新後爲某輛車插入數據會發生什麼情況?您最終得到的數據不一致。

+1

那麼這實際上是一個我正在用.NET做的舊VB6程序的重寫。所以所有的表和字段必須保持完全相同,否則前端將無法工作。但你確實提出了一個有趣的觀點。也許當我繼續重寫前端時,我會採取建議。數據庫本身可能不會以錯誤的順序更新。我是唯一一個更新和維護它。其他人都會讀它。但可能會發生。 – sinDizzy 2011-06-02 16:45:32

相關問題