2017-03-02 1 views
0

Ich versuche das herauszufinden. Ich habe einen Tisch mit mehreren hunderttausend Reihen. Jeder Job hat ungefähr 8 Zeilen. Ich muss eine Spalte pro Job # basierend auf dem höchsten Wert einer anderen Spalte aktualisieren.Viele Zeilen werden aktualisiert - Eine Zeile pro Gruppe

enter image description here

Für den Job setzten die cntrl_point Bedürfnisse 1, wo die oper_num am größten ist.

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 

Ich nehme an, ich bin in der OVER PARTITION falsch. Ich dachte, CURSOR wäre vielleicht angemessener, aber ich bin mir nicht sicher, wie ich das machen soll.

Jede Hilfe würde sehr geschätzt werden.

+0

Es ist möglich, dass für gleiche 'job' Wert, 2 oder mehr identische Max-Werte in' oper_num' Spalte? –

Antwort

0

In SQL Server können Sie row_number() für diesen Einsatz:

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

Vielen Dank für Ihre Antwort. Dies aktualisiert die erste Zeile in der Sequenz, aber nicht die, in der oper_num den größten Wert hat. –

+0

Ich kann es damit haben; –

+0

UPDATE a a.cntrl_point SET = 1 FROM jobroute a INNER JOIN ( \t SELECT Job, MAX (oper_num) als MAXOPERNUM \t FROM jobroute \t GROUP BY Job \t --HAVING MAX ( ) b ON a.job = b.job und a.oper_num = b.MAXOPERNUM –

Verwandte Themen