1
我需要一些基本的TSQL幫助。這裏是我的表佈局:SQL查詢 - 需要一些基本的幫助
訂單表
- SSN
- 郵編
ZipLookup表
- 郵編
- 州
所有列都是varchars。
我將如何得到每個州有不同SSN數量的州名單?優選地,如果特定SSN具有來自多個狀態的訂單,則只有具有最多訂單的狀態纔會被計入該SSN。
謝謝你給我的任何提示。
我需要一些基本的TSQL幫助。這裏是我的表佈局:SQL查詢 - 需要一些基本的幫助
訂單表
ZipLookup表
所有列都是varchars。
我將如何得到每個州有不同SSN數量的州名單?優選地,如果特定SSN具有來自多個狀態的訂單,則只有具有最多訂單的狀態纔會被計入該SSN。
謝謝你給我的任何提示。
首先,你最好確保你被允許存儲SSN,因爲有一大堆隱私法律和法規可能會禁止它。
查詢應該是這樣的:
SELECT z.State, COUNT(DISTINCT o.SSN) AS SsnCount
FROM ZipLookup z
INNER JOIN Orders o
ON o.ZipCode = z.ZipCode
GROUP BY z.State
如果你只需要算SSN在其-最頻繁使用狀態:
WITH StateSSNs AS
(
SELECT
o.SSN, z.State,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS RowNum
FROM Orders o
INNER JOIN ZipLookup z
ON z.ZipCode = o.ZipCode
GROUP BY o.SSN, z.State
)
SELECT z.State, COUNT(*) AS SsnCount
FROM ZipLookup z
INNER JOIN StateSSNs s
ON s.State = z.State
WHERE s.RowNum = 1
GROUP BY z.State
性能不會很好,我認爲這將需要至少一次全面掃描,也許需要兩次,但如果你想要更好的東西,那麼你需要規範化模式。
感謝您的快速回復。實際上,我將實際的專欄名稱更改爲SSN,因此它會更短。 :) 是否有可能寫一個查詢,如果一個特定的SSN有來自多個州的訂單,那麼只有該訂單數最多的州纔會被計入該SSN?就像一個特定的SSN有來自NY的5個訂單和來自KY的2個訂單,只計算來自NY的那個。 我通常只做簡單的查詢,然後轉而使用C#來處理任何我無法寫入的內容,但是這似乎可以在SQL中完成。 再次感謝您的幫助。 – 2010-04-03 01:05:28
絕對不可思議。非常感謝,這對我非常有幫助。 – 2010-04-03 02:08:32