Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Preciso de ajuda para converter a consulta T-SQL em consulta suportada pelo Oracle


Como agora você está multiplicando as pontuações, primeiro precisamos decidir qual é a pontuação se nenhum dos códigos for correspondido. Suponho que deveria ser 0. Em seguida, devemos quebrar todos os códigos possíveis em grupos independentes, ou seja, cujos resultados não dependem de outros membros dos grupos. Aqui estão (1,2,4) e (8). E defina a regra para cada grupo.
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;