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


  • Keresőbarát URL-ek IIS 7 alatt

    Balássy György (MS RD, ASP.NET MVP, MCTS) Korábban már írtam az IIS 7-ben található request filtering komponensről, amely segítségével a bejövő URL-eket lehet szétszabdalni és bizonyos szempontok szerint engedélyezni vagy tiltani a kérés feldolgozását. Van egy másik eset, amikor a bejövő URL-t kell felparszolni, ez pedig virtuális URL-ek használatakor fordul elő. Vagyis amikor article.aspx?id=123 helyett barátságosabb, például article/123 formátumú címet szeretnénk használni. Erre szolgál az IIS 7-hez letölthető URL Rewrite Module komponens is. Tovább »
  • ASP.NET adatbázis minimumon

    Balássy György (MS RD, ASP.NET MVP, MCTS) Az ASP.NET egyik nagy előnye, hogy bizonyos funkciók megvalósításához standard megoldást kínál. A felhasználókezelés, a profil, az eseménynapló és a webkijelzők esetén a standard megoldás része a standard adatbázis is, amely alapértelmezés szerint 11 táblából, 9 nézetből, 55 tárolt eljárásból és 13 szerepkörből áll. Ezeknek jelentős részére azonban sok esetben nincs szükség, szabaduljunk meg tőlük! 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