Ha már az előző bejegyzést a rendezésnek szenteltem, gondoltam írok még egy kicsit róla. Ez nem SQL Server 2012 újdonság, csak most találkoztam vele. Lehet olyan agymenésünk (vagy a megrendelőknek), hogy egy lekérdezés eredményét egy mező értékétől függően eltérően kell rendezni. Például a nőket ABC sorrendbe szeretnénk látni, a férfiakat is ABC sorrendben de csökkenő irányban, vagy esetleg a férfiakat meg beosztások szerinti sorrendbe szeretné látni. Ekkor jön jól, hogy lehet CASE kifejezést használni az order by listán. Nézzük azt ha különböző rendezés irányokat szeretnénk használni:
use AdventureWorks2012
go
select p.LastName, p.FirstName, e.Gender,e.MaritalStatus,e.JobTitle,p.BusinessEntityID
from HumanResources.Employee e
inner join Person.Person p on e.BusinessEntityID=p.BusinessEntityID
order by
case when e.Gender= 'M' then p.LastName end desc
,case when e.Gender= 'F' then p.LastName end
A fentihez teljesen hasonlóan lehet megadni, ha különböző szempontok szerint szeretnénk rendezni őket:
use AdventureWorks2012
go
select p.LastName, p.FirstName, e.Gender,e.MaritalStatus,e.JobTitle,p.BusinessEntityID
from HumanResources.Employee e
inner join Person.Person p on e.BusinessEntityID=p.BusinessEntityID
order by
case when e.Gender= 'M' then e.JobTitle end
,case when e.Gender= 'F' then p.LastName end
De mi a helyzet, ha figyelembe vesszük, hogy a teljes név több oszlopból áll, ekkor miképp kell megadni a rendezést? Ekkor gyakorlatilag rendezési mezőnként meg kell írni a case kifejezést use AdventureWorks2012
go
select p.LastName, p.FirstName, e.Gender,e.MaritalStatus,e.JobTitle,p.BusinessEntityID
from HumanResources.Employee e
inner join Person.Person p on e.BusinessEntityID=p.BusinessEntityID
order by
case when e.Gender= 'F' then p.LastName end
,case when e.Gender= 'F' then p.Firstname end
,case when e.Gender= 'M' then p.LastName end desc
,case when e.Gender= 'M' then p.Firstname end desc
Azt lehet megfigyelni, hogy egy olyan order by-t adtunk meg amely négy oszlopot tartalmaz, mely a nők esetén az utolsó két oszlop értéke null, a férfiak esetében meg az első két oszlopa null. Ezzel a technikával diszjunkt halmazokon egymástól független rendezéseket tudunk megadni.