0

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

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

例如,我尝试插入以下表结构;ItemOrder int, FruitType nvarchar(100),DatePicked 日期时间,

有以下数据

水果类型|采摘日期  
苹果|2012 年 10 月 1 日  
苹果|2012 年 10 月 3 日  
苹果|2012 年 10 月 2 日  
李子|9/13/2011  
李子|9/14/2011  
李子|9/15/2011
樱桃|12/2/2012
樱桃|12/4/2012

我试图得到以下结果

FruitType|DatePicked|ItemOrder
苹果|10/1/2012|1
苹果|10/3/2012|3
苹果|10/2/2012|2
李子|2011/9/13|1  
李子|2011/9/14|2  
李子|2011/9/15|3
樱桃|12/2/2012|1
樱桃|12/4/2012|2

帮助大家

创建表#FruitStandPicked
(
   FruitType NVARCHAR (100),
   日期选择日期时间
);



插入#FruitStandPicked(FruitType,DatePicked)
值('Apple','10/1/2012'),
       (“苹果”,“2012 年 10 月 3 日”),
       (“苹果”,“2012 年 10 月 2 日”),
       (“李子”,“2011 年 9 月 13 日”),
       (“李子”,“2011 年 9 月 14 日”),
       (“李子”,“2011 年 9 月 15 日”),
       (“樱桃”,“2012 年 12 月 2 日”),
       (“樱桃”,“2012 年 12 月 4 日”);


创建表#FruitStandTable
(
   项目订单INT,
   FruitType NVARCHAR (100),
   日期选择日期时间
);

--这需要调整
插入#FruitStandTable(ItemOrder、FruitType、DatePicked)
   SELECT row_number () OVER (ORDER BY fruittype, datepicked),
          水果类型,
          选择日期
     来自#FruitStandPicked;

从#FruitStandTable中选择*;

删除表#FruitStandTable;
     删除表#FruitStandPicked;

同样,这在下订单的范围内有效,但我也需要通过分组来下订单。

提前致谢!

4

1 回答 1

1

您仍然可以使用ROW_NUMBERwithPARTITION子句。试试这个:

SELECT *, ROW_NUMBER() OVER(PARTITION BY Fruit ORDER BY PickedDate) ItemOrder
  FROM <YOUR-TABLE>
于 2012-11-13T01:36:41.033 回答