sql >> Database >  >> RDS >> Oracle

SQL Dynamische ASC en DESC

U kunt oplossingen zoals @TonyAndrews doen door numerieke of gegevenswaarden te manipuleren. Voor VARCHAR2 een alternatief voor dynamische SQL zou kunnen zijn om twee expressies te hebben:

order by
   case when :sorting='ASC' then col1 end ASC,
   case when :sorting='DESC' then col1 end DESC

Wanneer :sorting heeft de waarde 'ASC' het resultaat van die ORDER BY wordt alsof het zo was geweest:

order by
   col1 ASC,
   NULL DESC

Wanneer :sorting heeft de waarde 'DESC' het resultaat van die ORDER BY wordt alsof het zo was geweest:

order by
   NULL ASC,
   col1 DESC

Een nadeel van deze methode is dat die gevallen waarin de optimizer een SORT-bewerking kan overslaan omdat er een index bij betrokken is die ervoor zorgt dat de gegevens al naar wens zijn gesorteerd, dat niet zal gebeuren wanneer de CASE-methode op deze manier wordt gebruikt. Dit zal een sorteeroperatie verplicht stellen, wat er ook gebeurt.



  1. Converteer niet-gepartitioneerde tabel naar gepartitioneerde tabel met ONLINE in Oracle PL/SQL

  2. Eenvoudigste manier om een ​​boom te bouwen uit een lijst met voorouders

  3. MySQL:werk alle rijen in een tabel bij die overeenkomen met de resultaten van een andere zoekopdracht

  4. MySQL sluit je aan bij twee tabellen, vind het maximale aantal en bestel op