Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ich benötige Hilfe beim Konvertieren einer T-SQL-Abfrage in eine von Oracle unterstützte Abfrage

Da Sie jetzt Punktzahlen multiplizieren, müssen wir zuerst entscheiden, wie hoch die Punktzahl ist, wenn keiner der Codes übereinstimmt. Ich nehme an, es sollte 0 sein. Als nächstes sollten wir alle möglichen Codes in unabhängige Gruppen aufteilen, dh die Ergebnisse hängen nicht von anderen Gruppenmitgliedern ab. Hier sind sie (1,2,4) und (8). Und definieren Sie die Regel für jede Gruppe.So

SELECT [id] ,[name],r = 
  -- At least one of values needed to get score > 0
  MAX(CASE WHEN code IN (1,2,4, 8) THEN 1.0  ELSE 0.0 END) *
  -- Now rules for every independent set of codes. Rule should return score if matched or 1.0 if not matched
  -- (1,2,4)
  coalesce(MAX(CASE WHEN [code] IN (1,2,4) THEN 0.70 END), 1.0 ) *
  -- (8) 
  coalesce(MAX(CASE WHEN [code] IN (8) THEN 0.75 END), 1.0)
  -- more ?
  FROM  (values (1, 'ali',4)
        ,(1, 'ali',1)
        ,(1, 'ali',8)
        ,(1, 'ali',2)
        ,(2, 'sunny',1)
     ,(4, 'arslan',4)) as t(id, name,code)
  GROUP BY id, name;