2017-09-21 3 views
0

Betrachten Sie die folgende TabelleWie für eine bestimmte Spalte

Dept product name parts WO 32 aa abc 11 1234 32 aa aas 18 2213 32 bb asd 16 3424 32 aa adf 19 1255 32 cc asa 10 7567 32 aa agd 11 1233 31 ss fsf 23 3434

Ich habe rund 100 dept auf eine bestimmte Menge von Daten anzuzeigen. in meinem Tisch. Was ich will ist, dass wenn die Dept. ist 32 und das Produkt ist "aa", ich möchte nur 30 Teile oder weniger anzeigen. Also in diesem Fall ist die Gesamtzahl der Teile für aa 59. Also hat das erste aa Produkt 11 Teile und das nächste aa Produkt hat 18 Teile, also ist das 29. Es sollte nun alle anderen aa Produkte ignorieren.

Erwarteter Ausgang

Dept product name parts WO 32 aa abc 11 1234 32 aa aas 18 2213 32 bb asd 16 3424 32 cc asa 10 7567 31 ss fsf 23 3434

Freuen uns über jede Hilfe.

Antwort

0

Angenommen, WO ist ein Primärschlüssel dann verwenden Sie SUM Fensterfunktion, um es zu lösen.

SELECT yt.Dept, yt.product, yt.name, yt.parts, yt.WO 
FROM yourtable yt 
LEFT JOIN (
    SELECT *, sum(y.parts) over (partition by y.dept order by y.parts) tsum 
    FROM yourtable y 
    WHERE y.product = 'aa' 
) t ON yt.WO= t.WO 
WHERE yt.dept != 32 or (yt.dept = 32 and t.tsum < 59) or (yt.dept = 32 and yt.product != 'aa') 
0

Sie können SUM() Fensterfunktion verwenden, wenn Sie mit dem Abt und Produkt

Ergebnis

dept product name parts wo 
32  aa  abc  11  1234 
32  aa  aas  18  2213 
32  bb  asd  16  3424 
32  cc  asa  10  7567 
31  ss  fsf  23  3434 
zu partitionieren haben
Verwandte Themen