Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie könnte diese Abfrage verbessert werden?

Verwenden Sie ein Aggregat anstelle von Unterabfragen:

select distinct controlid, 
  max (case when a=3 and b=13 and c=0 and d= 0 then OrderNo end) as colA,
  max (case when a=2                           then OrderNo end) as colB,
  max (case when a=1 and b=14 and e=1          then OrderNo end) as colC,
  max (case when a=3 and b=13 and e=1 and c=0 and d=0 then OrderNo end) as colD,
  max (case when OrderNo=#param2# then a end) as colE
from my_table
where controlid = #param1#
group by controlid

Ich weiß nicht, welches RDBMS Sie verwenden, also der case when Konstrukt muss möglicherweise an Ihren lokalen Dialekt angepasst werden. Dieser sollte für MSSQL gültig sein

UPDATE:Meine Brille funktioniert nicht richtig und daher ist mir der ORACLE-Tag nicht aufgefallen. Peinlich...