sql >> Database >  >> RDS >> Oracle

Ik heb hulp nodig bij het converteren van een T-SQL-query naar een door Oracle ondersteunde query

Omdat je nu scores vermenigvuldigt, moeten we eerst beslissen wat de score is als geen van de codes overeenkomt. Ik veronderstel dat het 0 moet zijn. Vervolgens moeten we alle mogelijke codes in onafhankelijke groepen splitsen, dat wil zeggen dat de resultaten niet afhankelijk zijn van andere groepsleden. Hier zijn ze (1,2,4) en (8). En definieer de regel voor elke groep.Dus

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. vind maximale waarde zonder aggregatie-operator in mysql

  2. Hoe krijg ik een bestand van BLOB in Oracle?

  3. Hoe PostgreSQL 12 op Fedora 33 te installeren

  4. SQL Server-uitvoerclausule in een scalaire variabele