2016-05-31 8 views
0

Ich benötigen den Minimalwert einer Funktion zu übernehmen, wenn der Minimalwert ihn auf einen 0 unseren virtuellen Spalt setzen, wenn nicht, setzt 1.und erstellen eine virtuelle Tabelle

SELECT ID, Name, (X + Y) AS TOTAL, MIN(TOTAL) AS MINVALUE FROM TABLE 

Beispiel

ID Name TOTAL MINVALUE 
    1  item 22  0 
    1  item 33  1 
    1  item 50  1 
    2  item2 200  1 
    2  item2 30  0 
+0

Sie würden einen Subselect benötigen. min() ist eine Aggregatfunktion und kann nur funktionieren, wenn die gesamte Ergebnismenge verfügbar ist, aber Sie verwenden sie pro Reihe, so dass jede Zeile automatisch gleichzeitig ihre eigene max/min ist. 'select min (total) von (wähle x + y als total von ...) als foo' –

Antwort

3

Sie tun dies mit Fensterfunktionen und case:

select id, name, (x + y) as total, 
     (case when (x + y) = min(x + y) over (partition by id) 
      then 0 else 1 
     end) as IsNotMinValue 
from t; 

ich normalerweise die Konvention o Unix folgen f "0" ist falsch und "1" (eigentlich nicht "0") ist wahr. Daher habe ich die Flagge IsNotMinValue genannt, weil ich es so interpretieren würde.

+1

total ist keine Spalte, aber das sollte einfach zu beheben sein und sollte funktionieren – JamieD77

+0

@ JamieD77. . . Vielen Dank. –

+0

Vielen Dank! –

Verwandte Themen