ORDER BY in een UNION statement

03-07-2014 | Marcel van Langen | SQL Server | sql server, order, union, sortering, volgorde

Een kort artikel dit keer. Als je een UNION statement gebruikt in SQL, zullen de resultaten worden getoond op basis van de volgorde van de statements. In sommige gevallen zul je echter het resultaat van alle losse UNION statements willen sorteren. Gelukkig is dat mogelijk.

De oplossing is eenvoudig. Een ORDER BY statement aan het eind, heeft automatisch betrekking op de gehele statement en dus de gehele recordset. Stel: je hebt een tabel met daarin boeken en een tabel met brochures. Je wilt een UNION statement doen, en daarna de resultaten sorteren op de datum dat de boeken en brochures zijn toegevoegd. In dat geval is de volgende code je vriend:

SELECT
boe_id AS id
, boe_datum AS datumToegevoegd
, boe_titel AS titel
, 'boek' AS type
FROM
Boek
WHERE
boe_actief = 1

UNION

SELECT
bro_id AS id
, bro_datum AS datumToegevoegd
, bro_titel AS titel
, 'brochure' AS type
FROM
Brochure
WHERE
bro_actief = 1

ORDER BY datumToegevoegd DESC

Het is in SQL niet toegestaan om een ORDER BY te zetten op een deelset. Maar goed, dat hoeft dus ook helemaal niet. Het is natuurlijk ook mogelijk om de resultaten random te organiseren. In dat geval pas je de code als volgt aan:

SELECT
boe_id AS id
, boe_datum AS datumToegevoegd
, boe_titel AS titel
, 'boek' AS type
, NewID() AS randomID
FROM
Boek
WHERE
boe_actief = 1

UNION

SELECT
bro_id AS id
, bro_datum AS datumToegevoegd
, bro_titel AS titel
, 'brochure' AS type
, NewID() AS randomID
FROM
Brochure
WHERE
bro_actief = 1

ORDER BY randomID

Over Morloff

Morloff ontwerpt en realiseert succesvolle webtoepassingen op het gebied van procesoptimalisatie, eCommerce en rapportage door de inzet van moderne webtechnieken, sociale media en zoekmachine optimalisatie.

over ons | diensten | portfolio | contact | route

naar website IJsmonster.nl naar website ICT intermediairs naar website marcelvanlangen.com

Twitter

Morloff

Cuneraweg 169a
3911 RH Rhenen

M +31 (0)6 - 515 96 189
W www.morloff.nl
E contactformulier

Morloff op Twitter Morloff op Facebook Morloff op LinkedIn Morloff via RSS