2012-12-14 64 views
0

我有2個表。一個具有訂單元素(OE),另一個具有項目信息(PO)。 1個項目有很多訂單元素。表格的設置方式是,項目日期在採購訂單中,貨幣在採購訂單中。我需要更新OE表中的歐元匯率。我試圖做這樣的事情包含另一個表的案例的SQL Server更新

UPDATE [OETest] 
    SET [Euro Exchange Rate] = { 
    CASE 
     WHEN (DATEPART(month, PO.[Project Date Time]) = January) 
     THEN 8.143296 
     WHEN (DATEPART(month, PO.[Project Date Time]) = February) 
     THEN 8.340111 
    } 
    FROM [POTest] PO, [OETest] OE  
    WHERE OE.[Currency] = 'YUAN' 

但我迷路了(這是我試過的許多查詢之一)。任何人都可以幫助我構建必要的查詢並通過它爲什麼有效嗎?

這個特定的查詢告訴我附近有關鍵字CASE

不正確的語法爲了更清楚什麼,我試圖完成:我在OE表歐元匯率的列。我有從網站(不在表格中)獲得的平均每月匯率。我想根據項目的月份和貨幣設置此匯率欄。我將在單獨的查詢中處理每種貨幣,因此人民幣是我擔心查詢的唯一貨幣。該月份在採購訂單表中。我需要在case語句中使用PO表中的月份。

+0

什麼不工作(除了你的語法不正確)? –

+0

這兩張表是如何相關的?如果你想加入這些表格,他們會加入什麼樣的領域? – Taryn

+0

項目ID字段 – SmashCode

回答

4
UPDATE OE -- the alias here rather than the base table name 
    SET [Euro Exchange Rate] = 8.143296 
    FROM [POTest] PO 
    JOIN [OETest] OE ON OE.project_id = PO.project_id -- you need a link  
WHERE OE.[Currency] = 'YUAN' 
    -- the following date range represents January this year 
    AND PO.[Project Date Time] >= '20120101' 
    AND PO.[Project Date Time] < '20120201' 

,如果你需要不同的值,根據不同的日期

UPDATE OE -- the alias here rather than the base table name 
    SET [Euro Exchange Rate] = 
     CASE Month(PO.[Project Date Time]) 
      when 1 then 8.143296 
      when 2 then 7.143296 
      when 3 then 7.743296 
      END 
    FROM [POTest] PO 
    JOIN [OETest] OE ON OE.project_id = PO.project_id -- you need a link  
WHERE OE.[Currency] = 'YUAN' 
    -- the following date range represents 3 months this year 
    AND PO.[Project Date Time] >= '20120101' 
    AND PO.[Project Date Time] < '20120401' 
+0

將會有附加值。我剛剛展示了一月,以便查詢更易於閱讀。 – SmashCode

+0

這最終修復了它。 – SmashCode

0

究竟似乎是這個問題你只需要一個case語句?

我可以看到許多問題與查詢。什麼是你遇到的SQL錯誤?

在任何情況下,如果我嘗試做一樣東西我想'你是幹什麼的,我這樣做:

UPDATE [OETest] OE 
SET [Euro Exchange Rate] = 
(SELECT CASE WHEN (DATEPART(month, PO.[Project Date Time]) = 'January') 
    THEN 8.143296 
    ELSE 0.000000 
END ExchageRate 
FROM [POTest] PO)  
WHERE OE.[Currency] = 'YUAN' 

我想在這裏做的是選擇結果我想在SET塊之後。在CASE聲明中,如果我沒有從日期部分得到結果,我添加了一個else。

WHERE部分應該是UPDATE子句上的WHERE條件,因爲除非要更新該OETest表中的所有記錄,否則需要告訴它哪些記錄要更新。

因此,在總結你說

更新從POTest表中OETest表,其中的價值,當項目的日期時間字段的月份部分等於一月,和更新記錄歐元匯率場幣值是'元'。

請注意,您可能需要在SELECT語句中具有WHERE子句,因爲它可能會返回多個記錄,而您只希望一個是獲取Project Date Time字段的順序。在猜測,你可能想要添加一個where語句,如下所示:

UPDATE [OETest] OE 
SET [Euro Exchange Rate] = 
(SELECT CASE WHEN (DATEPART(month, PO.[Project Date Time]) = 'January') 
    THEN 8.143296 
    ELSE 0.000000 
END ExchageRate 
FROM [POTest] PO WHERE PO.ProjectID = 100)  
WHERE OE.[Currency] = 'YUAN' 

讓我知道這是否有幫助。

關注 JT

+0

這是我在模板中使用update語句中的一個案例:http://www.bennadel.com/blog/933-Using-CASE-Statements-In-A-SQL-UPDATE-Query.htm – SmashCode

相關問題