SQL OVER基于分组

时间:2012-11-13 01:29:08

标签: sql-server-2008

这个很难解释。我正在尝试在我的选择插入中将Row_Number()Over(Order by PickedDate)放入新表中。

这适用于生产1,2,3,4,5,6,7,但这不是我想要做的。我希望在每个水果分组的第一位产生一行。

例如,我有以下表格结构,我试图插入; ItemOrder int,FruitType nvarchar(100),DatePicked datetime,

包含以下数据

FruitType|DatePicked  
Apple|10/1/2012  
Apple|10/3/2012  
Apple|10/2/2012  
Plum|9/13/2011  
Plum|9/14/2011  
Plum|9/15/2011
Cherry|12/2/2012
Cherry|12/4/2012

我正在尝试获得以下结果

FruitType|DatePicked|ItemOrder
Apple|10/1/2012|1
Apple|10/3/2012|3
Apple|10/2/2012|2
Plum|9/13/2011|1  
Plum|9/14/2011|2  
Plum|9/15/2011|3
Cherry|12/2/2012|1
Cherry|12/4/2012|2

帮助所有人

CREATE TABLE #FruitStandPicked
(
   FruitType    NVARCHAR (100),
   DatePicked   DATETIME
);



INSERT INTO #FruitStandPicked (FruitType, DatePicked)
VALUES ('Apple', '10/1/2012'),
       ('Apple', '10/3/2012'),
       ('Apple', '10/2/2012'),
       ('Plum', '9/13/2011'),
       ('Plum', '9/14/2011'),
       ('Plum', '9/15/2011'),
       ('Cherry', '12/2/2012'),
       ('Cherry', '12/4/2012');


CREATE TABLE #FruitStandTable
(
   Itemorder    INT,
   FruitType    NVARCHAR (100),
   DatePicked   DATETIME
);

--this needs the tweak
INSERT INTO #FruitStandTable (ItemOrder, FruitType, DatePicked)
   SELECT row_number () OVER (ORDER BY fruittype, datepicked),
          FruitType,
          DatePicked
     FROM #FruitStandPicked;

SELECT * FROM #FruitStandTable;

DROP TABLE #FruitStandTable;
     DROP TABLE #FruitStandPicked;

这再次起到了订单的作用,但我也需要通过分组来完成订单。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您仍然可以将ROW_NUMBERPARTITION子句一起使用。 试试这个:

SELECT *, ROW_NUMBER() OVER(PARTITION BY Fruit ORDER BY PickedDate) ItemOrder
  FROM <YOUR-TABLE>