我有一個查詢可以爲客戶提取月/年總計,並添加ntile排名。如果我能夠取出第1,2,3,4和5號的最大小計,我幾乎可以得到我所追求的,但我不知道如何繼續。SELECT top top 5 SUM(每個客戶一個)範圍內的每個月
例如,結果我想會是這個樣子:
Month Year CustomerCode SubTotal ntile
1 2012 CCC 131.45 1
1 2012 CCC 342.95 2
1 2012 ELITE 643.92 3
1 2012 CCC 1454.05 4
1 2012 CCC 12971.78 5
2 2012 CCC 135.99 1
2 2012 CCI 370.47 2
2 2012 NOC 766.84 3
2 2012 ELITE 1428.26 4
2 2012 VBC 5073.20 5
3 2012 CCC 119.02 1
3 2012 CCC 323.78 2
3 2012 HUCC 759.66 3
3 2012 ELITE 1402.95 4
3 2012 CCC 7964.20 5
EXCEPT - 我希望排名是不同的客戶像2月,但我的基本查詢是不是給我,結果 - 而且我顯然不知道如何在SQL SERVER 2005的T-SQL中獲得它 - 實際上我不確定我得到了什麼。
我的下一個選項是拉在C#的DataTable,並做一些體操到那裏,但必須有一個更簡單的方法:)
我的基本查詢是
SELECT
i.DateOrdered
,LTRIM(STR(DATEPART(MONTH,i.DateOrdered))) AS [Month]
,LTRIM(STR(YEAR(i.Dateordered))) AS [Year]
,c.CustomerCode
,SUM(i.Jobprice) AS Subtotal
,NTILE(5) OVER(ORDER BY SUM(i.JobPrice)) AS [ntile]
FROM Invoices i
JOIN
Customers c
ON i.CustomerID = c.ID
WHERE i.DateOrdered >= '1/1/2012'
AND i.DateOrdered <= '9/30/2012'
GROUP BY YEAR(i.DateOrdered), MONTH(i.DateOrdered), i.DateOrdered, c.CustomerCode
ORDER BY LTRIM(STR(DATEPART(MONTH,i.DateOrdered))),
TRIM(STR(YEAR(i.Dateordered))),
SUM(i.JobPrice), c.CustomerCode ASC
我會真的很感謝幫助獲得這個權利。
在此先感謝
崖
順便說一句,'DATEPART(MONTH,...)'可以用'MONTH替換( ...)',並且你並不真的需要圍繞'MONTH()'和'YEAR()'調用'STR()'。你也可能不需要'LTRIM()'。 (至少,你可以在GROUP BY中省略LTRIM,如果需要的話,可以將它們留在SELECT中) –
你想確保每個月不超過5個不同*客戶*或者沒有輸出中每月超過5個不同的*金額*換句話說,如果兩位顧客的每日總數相同,你是否希望他們算作一個(比如#3)還是兩個(比如#3和#4)? –