顧客の月/年の合計を引き出し、ntile ランキングを追加するクエリがあります。ntile 1、2、3、4、および 5 の最大小計を引き出すことができた場合、私が求めているものはほぼ得られますが、続行する方法がわかりません。
たとえば、私が望む結果は次のようになります。
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
例外 - ランキングは月 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
これを正しく行うための助けをいただければ幸いです。
前もって感謝します
崖