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: ,


  • VS05-08 migráció: miért nem megy a virtualizáció?

    Balássy György (MS RD, ASP.NET MVP, MCTS) Érdekes jelenség: van egy kódrészletem, ami tökéletesen megy, ha Visual Studio 2005 alatt létrehozott projektbe teszem bele, ám elszáll, ha Visual Studio 2008 alól próbálom használni. A kód a Program Files mappába próbál írni, így valahogy. Tovább »
  • Hullanak az IIS-ek

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az utóbbi időben egyre több olyan hír jelent meg a világhálón, amelyek szerint durva hiba lehet a Windows-ban, az IIS-ben vagy az SQL Serverben, mert sorra hullanak azok a szerverek, melyek ezeket használják. Április 17-én a Microsoft kiadott egy Security Advisory-t (951306), amely azonban nem írt arról, hogy pontosan mi a hiba oka, csak azt tette egyértelművé, hogy nincs patch, mi javítaná. 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