Rendezésről ismét

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.



Kovács Ferenc

Kovács Ferenc 1998-ban végeztem villamosmérnökként a Budapesti Műszaki Egyetemen, azóta főleg adatbázis technológiákkal és adatbányászati algoritmusok fejlesztésével foglalkozom. A BME Automatizálási és Alkalmazott Informatikai Tanszékén oktatok az egyetem elvégzése óta, 2000-től kezdődően folyamatosan vannak adatbázisokkal foglalkozó kurzusaim. Az egyetemi oktatás mellett szoftverfejlesztőként dolgoztam a Multisoft KFT-nél, valamint a Philips Speech Processing részlegénél.

2012.03.30. 19:19:36 | Permalink | Hozzászólások: 0 | Tárgyszavak: ,


  • Beágyazott operációs rendszerek, 2. nap (Windows PE)

    Kővári Bence A beágyazott Windows egyik fontos spórolási trükkje, hogy pontosan azokat a drivereket tartalmazza csupán, amelyek az adott hardverkonfiguráció futásához szükségesek. Az aktuális számítógépünk konfigurációját pedig viszonylag egyszerűen feltérképezhetjük, ha futtatjuk a tap.exe nevű csodaalkalmazást. Van azonban egy bökkenő: a tap.exe-t csak Windows alatt lehet futtatni, és ezzel már meg is érkeztünk a 22-es csapdájába. Nézzük mit tudunk ezzel kezdeni. Tovább »
  • PHP Alapok Windows Serveren

    Dávid Zoltán Sorozatunk legelső részében a PHP motort telepítettük, és bekonfiguráltuk az IIS 7-tel történő együttműködésre. Ebben a demóban alap PHP kódok futtathatóságát demonstráljuk Windows rendszereken, IIS7 webszerver és FastCGI modul felhasználásával. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások