sql >> Databasteknik >  >> RDS >> Oracle

Hur kan denna fråga förbättras?

använd ett aggregat istället för underfrågor:

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

Jag vet inte vilket RDBMS du använder, så case when konstruktionen kanske måste modifieras till din lokala dialekt. Den här bör vara giltig för MSSQL

UPPDATERING:Mina glasögon fungerar inte korrekt och så jag märkte inte ORACLE-taggen. Pinsamt...



  1. Använda MyRocks Storage Engine med MariaDB Server

  2. Sekvens vs identitet

  3. Hur får jag denna tidsstämpel i det format jag vill ha, Oracle SQL

  4. Lägg till IF ELSE-satsen