0

SQLServer2008を使用しています

このように構成された販売注文のテーブルがあります

PartNo  Desc      OrderDate      OrderQty
60001   widget1   Apr-02-2012    3
60001   widget1   Apr-14-2012    5
60001   widget1   Jun-04-2012    3
60002   widget2   Jan-03-2012    1
60002   widget2   jan-17-2012    1
60002   widget2   aug-04-2012    30
60002   widget2   sep-02-2012    1
60003   widget3   oct-01-2012    4
60003   widget3   oct-04-2012    7
60003   widget3   oct-17-2012    3
60004   widget4   nov-04-2011    8
60004   widget4   nov-05-2011    8
60004   widget4   nov-05-2012    8
60004   widget4   nov-07-2012    7

各アイテムの1か月あたりの合計の最大値であるテーブルを返したいです。こんな感じ

PartNo    Desc     MaxSoldPerMonth  Month  Year
60001     widget1  8                Apr    2012
60002     widget2  30               Aug    2012
60003     widget3  14               oct    2012
60004     widget4  16               nov    2011

月は実際には数値形式(つまり、nov = 11、oct = 10、apr = 4、ect)で、読みやすくするためにこのようにしました。ありがとう

4

2 に答える 2

3

以下を使用できます。

;with cte as
(
  select partno, 
    [desc], 
    sum(orderqty) total,
    datename(month, orderdate) month, 
    year(orderdate) year,
    row_number() over(partition by partno order by sum(orderqty) desc) rn
  from yourtable
  group by partno, [desc],
    datename(month, orderdate), year(orderdate)
) 
select partno, [desc], total, month, year
from cte
where rn = 1

デモで SQL Fiddle を参照してください

于 2012-11-19T20:02:36.630 に答える
3

これはそれを行う必要があります:

;WITH MonthlyOrders AS
(
    SELECT PartNo, [Desc], CONVERT(VARCHAR(6),OrderDate,112) YearMonth, SUM(OrderQty) OrderQty
    FROM YourTable
    GROUP BY PartNo, [Desc], CONVERT(VARCHAR(6),OrderDate,112)
),MaxOrders AS
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY PartNo, [Desc] ORDER BY OrderQty DESC) RN
    FROM MonthlyOrders
)
SELECT PartNo, [Desc], OrderQty MaxSoldPerMonth, YearMonth
FROM MaxOrders
WHERE RN = 1;
于 2012-11-19T19:59:59.843 に答える