2016-04-08 8 views
1

私は、データを注文する数値列、情報を保持するテキストフィールド、およびステータス列を持つテーブルを持っています。ステータス列に従って番号付きデータを並べ替えるストアドプロシージャを作成するにはどうすればよいですか?

item_num item status 
1   Plate new 
2   Cup  continued 
3   Fork new 
4   Spoon revised 

項目が「中止」する状態で更新されたとき、私は最高の数を有する「中止」の状態で、すべてのアイテムを入れるためにitem_numを並べ替え、それに応じて他の項目の順序を変更するには、リストを必要としています。私はカップを中止した場合ので、私はこの中で結果のテーブルを更新するストアドプロシージャを必要とする:

item_num  item status 
1   Plate new 
2   Fork new 
3   Spoon revised 
4   Cup discontinued 

私はデータを更新し、状況によって並べ替えする方法についていくつかの方向性を必要とします。

私はMicrosoft SQL Serverを使用しています。 item_numは主キーではありません。私が持っている問題は、テーブル自体に変更を加えることができず、ストアドプロシージャでなければならないため、自分ができることには限界があり、それらの数値を変更する必要があるということです。これは、EHRの治療計画の目標です。治療計画文書が生成されると、目標番号(item_num)によって目標が一覧表示されます。したがって、ユーザーが目標を中断した場合、番号付けは間違っています。治療計画には「中止」の目標は示されていません。だから、ゴールは1,2,3,4から1,2,4へ(3番目の目標を打ち切ったら)。

私はElectronic Health Recordsシステムのフロントエンドの開発者です。このストアドプロシージャは、ユーザーがボタンをクリックすると起動する必要があります。このサイトはとても役に立ちましたが、私の最初の投稿です。謝罪。

+2

古いitem_numを置き換えますデータが表示された後に適用された場合、item_num列全体を書き換えません。 status_id、status_text、view_orderカラムを持つ3番目のステータステーブルを考えてみてください。ここで、view_orderはクエリで使用できる数字です –

+1

どのRDBMSを使用していますか? – Aducci

+0

これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえるので、なぜアイテムの番号を変更する必要がありますか? 'item_num'が主キーである場合、これは悪い考えです。 – jmoerdyk

答えて

0

すべての行がdistinctである限り、これを実現するにはROW_NUMBER()を使用できます。そうでない場合は、joinを処理するための鍵が必要です。

まずあなたが別の順序を使用する一時テーブルにすべてを入れて、あなたの新しいitem_num

を作成
SELECT item_num, item, status, 
     ROW_NUMBER() over (ORDER BY CASE WHEN STATUS = 'Discontinued' 
         THEN 2 ELSE 1 END) as 'newnum' 
INTO #TEMP 
FROM TABLE 

を次にJOINあなたの一時メインに、そしてnewnum

UPDATE ta 
SET ta.item_num = t.newnum 
FROM table ta 
JOIN #temp t on t.item_num = ta.item_num 
      AND t.item = ta.item 
      AND t.status = ta.status 
関連する問題