sql >> Base de Datos >  >> RDS >> Oracle

Necesito ayuda para convertir una consulta T-SQL en una consulta compatible con Oracle

Dado que ahora está multiplicando puntajes, primero debemos decidir cuál es el puntaje si no coincide ninguno de los códigos. Supongo que debería ser 0. A continuación, deberíamos dividir todos los códigos posibles en grupos independientes, es decir, cuyos resultados no dependen de los miembros de otros grupos. Aquí están (1,2,4) y (8). Y defina la regla para cada grupo. Así que

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;