2013-01-02 65 views
1

我想回到我們是否在特定位置提供服務。該層次結構是郵編>國家>全國上MAX值返回的數據(不影響MAX的結果)

所以,如果你輸入一個TX郵政編碼,它會先看看是否有一個zip條目。如果不是,它將檢查TX條目。如果仍然沒有命中,它將檢查全國範圍的政策。

要做到這一點,我有一個計算器字段,表示specificty的水平。郵政編碼爲3級,States = 2,CW = 1。所以一個簡單的MAX將讓我知道我正在處理的數據級別。我查詢了這個的一個例子是:

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec 
FROM Service_Availability 
WHERE Service_Availability.State = "TX" OR Service_Availability.State = "CW" 
GROUP BY Service_Product; 

現在,這裏是我的問題進來

我想知道,如果服務可在提供特異性的最高水平。不過,我沒有正確的做法...

SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec 
FROM Service_Availability 
WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW") 
AND Service_Availability.Available = TRUE 
GROUP BY Service_Product; 

這將返回特異性的最高水平,服務是可用的,沒有如果服務可在特異性的最高水平。

要說的另一種方式,假設ZIP是68123(內布拉斯加州奧馬哈)。

我的數據庫顯示,我們在內布拉斯加州提供服務,但無論出於何種原因,我們特別不能在奧馬哈(68123)提供服務。我想讓db看到我有zip級別的數據,並用它來確定可用性(FALSE)。

我明白爲什麼我的代碼是錯誤的做法,但我不知道從來到它的方向。幫助表示讚賞!

+0

這是不完全清楚你正在嘗試做的。請張貼你的表格結構的一些樣本數據,然後得到想要的結果。 – Taryn

+0

您可以使用另一種模式來代替MAX/GROUP BY ...它將SELECT TOP 1與ORDER BY結合在一起。很多時候它使你的邏輯更簡單。我會建議探討這一點。 –

+0

@Dave:OP似乎沒有在尋找單個記錄結果,所以TOP 1在這裏不起作用。 – PinnyM

回答

1

你需要INNER JOIN你的初始查詢(幾乎)作爲一個子查詢得到這個工作:

SELECT Service_Availability.Service_Product, Service_Availability.Specificity 
FROM Service_Availability 
INNER JOIN (
    SELECT Service_Availability.Service_Product, MAX(Service_Availability.Specificity) AS Spec 
    FROM Service_Availability 
    WHERE (Service_Availability.State = "TX" OR Service_Availability.State = "CW") 
    GROUP BY Service_Availability.Service_Product) max_spec 
    ON Service_Availability.Service_Product = max_spec.Service_Product 
    AND Service_Availability.Specificity = max_spec.Spec 
WHERE Service_Availability.Available = TRUE 
+0

你對這個功能的解釋正是我正在尋找的,所以我們在同一頁面上。但是,您的查詢(第一個)顯示服務可用的最高特定級別。 例如,服務A在狀態中可用,但不在zip中,因此它不應顯示在列表中。但是,我所看到的是它顯示了2(國家級別)的特異性。 –

+0

「服務A」是否有一個表格條目(特定性= 3),其狀態設置爲「TX」或「CW」,「可用」設置爲「FALSE」?這可能不會因爲對於zip專用性而言,「State」字段可能包含郵政編碼 - 是嗎?如果是這樣,那麼你需要擴展你的WHERE子句來搜索這個狀態的所有可能的狀態值 - 這將包括所有的郵編碼。如果這些代碼(狀態和zip)存在於某個表中某處,則可以執行聯合搜索... – PinnyM

+0

關閉。可用性表格包含STATE,ZIP_CODE,AVAILABLE和SPECIFICITY字段。狀態將始終具有狀態,並且該zip將有一個zip或「DEFAULT」。因此,服務A有一個NE 68123 FALSE 3(州,郵編,可用,規格)的條目。還有服務A NE DEFAULT TRUE 2條目。 –