2016-08-24 60 views
1

所以我不確定我搞砸了多少Access SQL查詢,但它相當複雜。使用Switch語句和左連接訪問選擇Top 1 SQL

這裏是場景:有三個表格。一個叫做「PriceMatrix」,一個叫做「PreApprovedPricing」,最後一個叫做「Request」。批准的定價包含按狀態列出的「批准」價格,「價格矩陣」包含從另一個來源生成的價格列表,請求是所有這些都指向(也包含州)的父記錄。我試圖編寫一個查詢來比較每個表格中的價格,如果預先批准的價格低於價格矩陣中的價格,它會替換字段中的值,但是如果它大於,那麼它會保留原價格矩陣價格。我試過用switch語句來查看給定的狀態。

這裏是我的查詢:

SELECT TOP 1 [ApprovedPrice] from [PreApprovedPricing] AS [1stMonthApproved] WHERE [ApprovedPrice] >= [PriceMatrix].[1stMonth] 
ORDER BY [ApprovedPrice] ASC, 
SWITCH(Request.[state] = 'CT' , [1stMonthApproved], Request.[state] = 'MA' , [1stMonthApproved], 1=1 , [PriceMatrix].[1stMonth]) AS 1stMonth, 
FROM PriceMatrix LEFT JOIN Request ON PriceMatrix.RequestID = Request.RequestID; 

我不斷收到語法錯誤,但我似乎無法深入其中的一個問題是,從而產生。所以任何輸入都會很好,因爲我仍在學習SQL

回答

1

您不能有多個From子句。您的發言

SELECT TOP 1 [ApprovedPrice] 
from [PreApprovedPricing] AS [1stMonthApproved] 
WHERE [ApprovedPrice] >= [PriceMatrix].[1stMonth] 
ORDER BY [ApprovedPrice] ASC, 
SWITCH(Request.[state] = 'CT' , [1stMonthApproved], Request.[state] = 'MA' , [1stMonthApproved], 1=1 , [PriceMatrix].[1stMonth]) AS 1stMonth, 
FROM PriceMatrix 
LEFT JOIN Request ON PriceMatrix.RequestID = Request.RequestID; 

居然是:

Select Top 
From 
Where 
Order by 
From 
Left Join 

那一定會得到語法錯誤。我假設你想在那裏有一個子查詢。也許是這樣的(但很難說肯定):

SELECT [ApprovedPrice] , 
    (Select top 1 SWITCH(Request.[state] = 'CT' , [1stMonthApproved], Request.[state] = 'MA' , [1stMonthApproved], 1=1 , [PriceMatrix].[1stMonth]) 
    from [PreApprovedPricing] AS [1stMonthApproved] 
    WHERE [ApprovedPrice] >= [PriceMatrix].[1stMonth] 
    ORDER BY [ApprovedPrice] ASC, 
     SWITCH(Request.[state] = 'CT' , [1stMonthApproved], Request.[state] = 'MA' , [1stMonthApproved], 1=1 , [PriceMatrix].[1stMonth])) AS 1stMonth 
FROM PriceMatrix 
LEFT JOIN Request ON PriceMatrix.RequestID = Request.RequestID; 
+1

酷感謝布拉德,我已經得到了語法錯誤,停止在治療前1語句作爲一個子查詢,但現在我就奇數值是我想我只需要評估查詢本身的邏輯。所以如果我需要得到我的邏輯幫助,我會提出另一個幫助問題,但是您的答案解決了語法的基本問題,謝謝! – mattlore