sql >> Databáze >  >> RDS >> Oracle

Potřebuji pomoc s převodem dotazu T-SQL na dotaz podporovaný Oracle

Protože nyní násobíte skóre, musíme se nejprve rozhodnout, jaké je skóre, pokud se neshoduje žádný z kódů. Předpokládám, že by to mělo být 0. Dále bychom měli rozdělit všechny možné kódy do nezávislých skupin, to znamená, že výsledky nezávisí na členech ostatních skupin. Zde jsou (1,2,4) a (8). A definujte pravidlo pro každou skupinu. Takže

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;


  1. Jak MariaDB dosahuje globálního měřítka s Xpand

  2. Jak nahradit řetězec jiným řetězcem a zachovat případ v php a mysql?

  3. Typy SQL JOIN

  4. Generátory dat pro SQL server?