2017-02-27 10 views
1

Gibt es eine Möglichkeit in SQL, eine bestimmte Zeile auszuwählen, indem Sie die Bedingung in der Reihenfolge überprüfen?SQL-Abfrage zum Auswählen einer Zeile basierend auf einer Bedingung

Zustand: wählen 1 FC, min (Status), max (Version), max (CD), max (MD)

Tabellendaten:

FC Status Version CD MD 
1 999  23  20 13 
1 500  10  22 15 
1 400  23  19 11 
1 500  15  18 9 
1 400  19  17 12 
1 400  19  16 13 
1 400  23  17 30 

Ausgang sollte sein:

FC Status Version CD MD 
1 400  23  19 11 

Antwort

8

Ja. Verwenden Sie TOP und ORDER BY:

select top 1 t.* 
from t 
order by status asc, version desc, cd desc, md desc; 

Wenn Sie dies per FC tun wollen, dann verwenden row_number():

select t.* 
from (select t.*, 
      row_number() over (partition by fc 
           order by status asc, version desc, cd desc, md desc 
           ) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
0

Mit GROUP BY-Klausel:

SELECT FC,min(status),max(Version),max(CD),max(MD) 
FROM YOUR_table 
GROUP BY FC 
+0

Wenn Sie sorgfältig schauen, werden Sie sehen, dass dies nicht das ist, was das OP verlangt. Die CD-Spalte ist nicht der Maximalwert. –

2

SQLServer hat praktisch with ties und erlaubt row_number() in Order by. So

select top 1 with ties t.* 
from t 
order by row_number() 
     over (partition by fc order by status asc, version desc, cd desc, md desc) ; 
Verwandte Themen