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


  • Tracking profile importálása szkriptből

    Balássy György (MS RD, ASP.NET MVP, MCTS) Nincs jobb, mint amikor az embernek van egy olyan szkriptje kéznél, ami egyszerűen és átláthatóan teszi a dolgát és igazán megkönnyíti a fejlesztő munkáját. Az egyik gyakori feladat az adatbázis létrehozása, amit két módon lehet megtenni. Tovább »
  • Melyik SharePointot válasszam?

    Balássy György (MS RD, ASP.NET MVP, MCTS) Amikor SharePoint funkciókról beszélünk, sajnos általában elég pontatlanul fogalmazunk (én is és a Microsoft is), nem derül ki, hogy egy adott szolgáltatás a WSS vagy a MOSS része, az utóbbiból pedig a standard vagy az enterprise csomagban kapjuk-e meg? Akkor jön a fejfájás, amikor a fejlesztői gépről át kellene költözni az éles szerverre és a fejlesztőktől kérdezik a megrendelő oldalon az üzemeltetők, hogy mit telepítsenek. 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