2017-05-02 4 views
0

whileループで簡単に何かを実現したいが、実行するには時間がかかりすぎるので、CTEテーブルでこれを行うことができると確信しているが、わからない。SQL Server CTEで注文を追加する

は、私は多くの1つに参加する2つのテーブルを持っていると私は私の詳細に順序を置くしようとしているここに私のデータがあります:あなたは多くのIDRVOBJETを持っている各IDRVため

enter image description here

。私はIDRVの各IDRVOBJETに1からnの注文番号を付けたいと思っています。私は明らかだが、ここで私は、結果として持っているべきものかどうかはわからない。私を助けるために時間を割いて

enter image description here

感謝を!ただ、窓関数を使用し

IDRV IDRVOBJET ORDER 
12700 76357 1 
12700 76358 2 
12701 76363 1 
12701 76364 2 
12701 76365 3 
12702 76359 1 
12702 76360 2 
12703 76120 1 
12703 76121 2 
12703 76122 3 
12705 19375 1 
12705 19376 2 
12706 19410 1 
12707 19408 1 
12707 19409 2 
12709 22473 1 
12709 22474 2 
12711 40352 1 
12711 40353 1 
+0

でROW_NUMBERとパーティションを使用することができます。私はちょうど私の編集に書式設定されたテキストを入れて – alexandre

答えて

3

EDIT

は、ここでフォーマットさテキストです。

SELECT 
    IDRV, 
    IDRVOBJECT, 
    ROW_NUMBER() OVER (PARTITION BY IDRV ORDER BY IDRVOBJECT) as ORDRE 
FROM YourTable 
+0

それは動作します! ...私にはOMGのおかしなことがあります。私が次回にどのように役立つかを少し説明することができたら、私は次回に助けてくれるでしょう:) ありがとう – alexandre

+0

ROW_NUMBERあなたは[ここ]について読むことができます(https://docs.microsoft.com/en-us/sql/t -sql/functions/row-number-transact-sql)しかし、キーはパーティションと順序です。 ROW_NUMBER()やPARTITION BYのようなウィンドウ関数では、Order byは必須です。 PARTITIONは本質的に結果セットをグループ化または分割するので、結果セット全体はIDRVの内容を考慮せずに並べ替えられます。それを取り出して、違いを見てください:)。また、ORDER BYの後にASCとDESCを試してください。 – scsimon

+0

多くの人に感謝します!私はrow_numberを試してみましたが、私はそれのパーティション部分を知らなかった:) – alexandre

1

あなたは、私はそれがより明確にするだけだった理解@jarlh

select *, Ordr = Row_Number() over (partition by IDRV order by IDRVOBJET) from your table 
1
SELECT IDRV,IDRVOBJECT,Row_Number()Over(Partition by IDRV Order by IDRVOBJECT) AS ORDRE 
FROM <yourtable> 
関連する問題