2009-05-29 17 views
3

私は、「sortorder」というラベルの付いたテーブルを持っています。これは、顧客が各アイテムの順序を手動で変更できるようにするために使用されます。表には「CategoryId」というラベルの列もあります。単一のデータベースクエリの条件に基づいて値を増やす

CategoryIdを含むすべてのデータを知っていたデータセットを一括してインポートすると、クエリー内で 'SortOrder'の値をどのように指定できるのか不思議で、1からXそれぞれ固有のカテゴリID内にあります。

ありがとうございました。

答えて

9

私はあなたの質問を理解しているとは分かりませんが、はテーブルへの挿入中に適切なSortOrderをどのように合成するかと思います。 CategoryIdでパーティション化するには、ROW_NUMBER()を使用する必要があります。もちろん、「Xに1」のpropert順序を与える並べ替えの基準を定義する必要があります:あなたはあなたのインポートにROW_NUMBER関数を使用する必要がしているよう

INSERT INTO myTable (SortOrder, CategoryId, <other columns> ...) 
SELECT ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY mySortCriteria) 
    , CategoryId 
    , <other columns> ... 
    FROM SourceTable; 
+0

あなたは私の一日を保存しました。ありがとうございます。 SQL 2005のROW_NUMBER()について知っていますが、PARTITION BYパラメータについてはわかりませんでした。 ありがとうございます。 –

+0

ウィンドウ関数FTW!しかし、他のSQL Server 2005では動作しない可能性があります。 –

+0

良い答え - あなたは私にそれを打つ:) –

1

が鳴ります。

0

SQL Server 2000にまだ残っている人がいる場合は、このタスクを実行する別の方法があります。

何らかの種類のステージングテーブルを使用して、バルクインサートからデータを修正します。それにはsortorderという列があり、最初に1とIDベースのID列が入力されていることを確認します。

は、次に、あなたのprodテーブルにデータを入れ、自己結合で

update t 
set sortorder = t1.sortorder +1 
from test t 
join Test t1 on t.id = t1.id+1 

のようなものを、これを更新することができます。

関連する問題