2017-03-02 8 views
0

私はこれを理解しようとしています。私は数十万行のテーブルを持っています。各ジョブ#は約8行あります。他の列の最高値に基づいてジョブごとに1列を更新する必要があります。 oper_numが最大で1に設定さcntrl_pointのニーズジョブの場合多くの行を更新 - グループごとに1行

enter image description here

UPDATE jobroute 
SET cntrl_point = 1 
SELECT DISTINCT job, cntrl_point, MAX(oper_num) OVER (PARTITION BY job) MAX_Oper_Num 
FROM jobroute 
WHERE job not like 'J%' AND suffix = 0 

私はオーバーパーテーションを間違って使います。私はおそらくCURSORがもっと適切かもしれないと思ったが、私はそれをどうやって行うのか分からない。

ご協力いただければ幸いです。 SQL Serverで

+0

? –

答えて

0

、あなたはこのためrow_number()を使用することができます。

同じ `job`の値のために、` oper_num`列内の2つの以上の同一の最大値を持っている可能性がある
with toupdate as (
     select jr.*, row_number() over (partition by job order by oper_num desc) as seqnum 
     from jobroute jr 
     where job not like 'J%' AND suffix = 0 
    ) 
UPDATE toupdate 
    SET cntrl_point = 1 
    WHERE seqnum = 1; 
+0

ありがとうございました。シーケンス内の最初の行は更新されますが、oper_numが最大値を持つ行は更新されません。 –

+0

私はこれを持っているかもしれません。 INNERがB ON MAX( )を--HAVINGジョブ \t BY jobroute \t群からMAXOPERNUM \tとして、 ( \t SELECTジョブをJOIN MAX(oper_num)jobroute FROM –

+0

UPDATE = 1 SETのa.cntrl_pointをa.job = b.jobとa.oper_num = b.MAXOPERNUM –

関連する問題