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 日  
プラム|2011/9/13  
プラム|2011/9/14  
プラム|2011/9/15
チェリー|2012/12/2
チェリー|2012/12/4

私は次の結果を得ようとしています

果物の種類|収穫日|ItemOrder
アップル|2012 年 10 月 1 日|1
アップル|2012/10/3|3
アップル|2012/10/2|2
プラム|2011/9/13|1  
プラム|2011/9/14|2  
プラム|2011/9/15|3
チェリー|2012/12/2|1
チェリー|2012/12/4|2

みんなを助けるために

CREATE TABLE #FruitStandPicked
(
   FruitType NVARCHAR (100),
   選択日DATETIME
);



INSERT INTO #FruitStandPicked (FruitType、DatePicked)
値 ('アップル', '10/1/2012'),
       (「アップル」、「2012 年 10 月 3 日」)、
       (「アップル」、「2012 年 10 月 2 日」)、
       (「プラム」、「2011 年 9 月 13 日」)、
       (「プラム」、「2011 年 9 月 14 日」)、
       (「プラム」、「2011 年 9 月 15 日」)、
       (「チェリー」、「2012 年 12 月 2 日」)、
       ('チェリー', '12/4/2012');


CREATE TABLE #フルーツスタンドテーブル
(
   アイテムオーダー INT,
   FruitType NVARCHAR (100),
   選択日DATETIME
);

-- これには微調整が必​​要です
INSERT INTO #FruitStandTable (ItemOrder、FruitType、DatePicked)
   SELECT row_number () OVER (ORDER BY fruittype, datepicked),
          フルーツタイプ、
          ピック日
     FROM #フルーツスタンドピッキング;

SELECT * FROM #フルーツスタンドテーブル;

DROP TABLE #FruitStandTable;
     DROP TABLE #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 に答える