Ich führe diese Abfrage in SQL Server und es funktioniert gut, aber wenn ich versuche, es in Oracle auszuführen, gibt es nicht die gleichen Ergebnisse.Ich brauche Hilfe bei der Umwandlung von T-SQL-Abfrage in Oracle unterstützte Abfrage
Sie können in meinem anhängenden Foto die Daten eines Kunden sehen, die den Code 1, 2,4, 8 haben, und er sollte 0,70 Wert für den Code 1,2,4 erhalten und dann für den Code 8 er haben sollte 0,75 erhalten, nach der Multiplikation sollte 0,52 als Wert zurückgegeben werden. Ich habe es in Oracle versucht, indem ich null durch nvl ersetze, aber es gab 1 statt 0.52 zurück. Bitte helfen Sie mir diese Abfrage in einer Oracle-unterstützten Abfrage zu konvertieren, die die gleichen Ergebnisse liefert.
Hier ist meine Abfrage
SELECT [id] ,[name],r = isnull(nullif(
max(CASE WHEN [code] IN (1,2,4) then 0.70 else 0 end)
,0),1)
* isnull(nullif(
min(CASE WHEN [code] IN (1,2) then 0 else 1 end)
* max(CASE WHEN [code] IN (4) then 0.20 else 0 end)
,0),1)
* isnull(nullif(
max(CASE WHEN [code] IN (8) then 0.75 else 0 end)
,0),1)
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;
Bitte, im Interesse der Vernunft, schreiben diese Abfrage ohne diese alte Joinsyntax. Verwenden Sie die richtigen LINKEN, INNEREN oder KREUZVERBINDUNGEN, je nachdem, was für Ihre Anwendung geeignet ist. Die Joins, die Sie oben verwendet haben, sind wirklich eine schlechte Übung. –
Wenn Sie 'MAX sagen (FALL WENN RM_LIVE.CRWSPECFUNC.IDCRWSPECFUNC IN (31.723) THEN 0.75 ELSE 1 ENDE)' Sie würden 1 nicht 0.75 .. Sie sicher, dass Sie die Berechnung in SQL schon herausgefunden haben? scheint, dass alle deine ELSE's 0 sein sollten – JamieD77
@Rich Benner Vergiss einfach die Verbindungen usw., Alles, was ich tun muss, ist, meinen Kunden einige Punkte zu geben, basierend auf den Codes, die sie durch Multiplizieren aller Werte mit denen bekommen haben Codes. Sagen wir, wenn jemand die Codes 1,2,4 und 31 hat, dann sollte er 0,70 für 1,2,4 und 0,75 für Code 31 bekommen, also wird sein Gesamtwert 0,52 sein. – Fari