[MS SQL Server 2005] Namen alfabetisch sorteren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Haijo
  • Registratie: Februari 2006
  • Laatst online: 21-09-2024
Titel was niet lang genoeg, dát kan ik nog wel namelijk. Echter, het punt is dat ik 1 naam altijd bovenop moet hebben. Wat heb ik geprobeerd? Op meerdere manieren in combinatie met ORDER BY, WHEN, THEN queries gebouwd. Uiteindelijk bereik je vanzelf het punt je random combinaties bouwt maar(verrassend genoeg) geen resultaat. :(

Wat ik dus wil is dat als SQL de specifieke naam tegenkomt hij hem boven aan zet en de rest gewoon alfabetisch sorteert. Overigens bouw ik een Stored Procedure in SQL Server 2005 van Microsoft. Kan iemand mij vertellen wat hier de juiste syntax voor is?
code:
1
2
IF name = die ene naam 
THEN


en daar loop ik dus vast? Hoe zeg ik tegen SQL dat die bovenaan moet? Met "THEN 1?"

[ Voor 15% gewijzigd door Haijo op 25-03-2009 16:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dit lijkt me niet iets wat je in SQL moet gaan doen. Dergelijke intelligentie kun je m.i. beter in een andere laag van je software programmeren.

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

SQL:
1
2
3
4
5
6
7
select *
from personen
order by case achternaam
    when 'DieEneNaam'
    then 'A'
    else 'Z' + isnull(achternaam, '')
    end


Raaaaaaanzig :P Maar 't werkt wel :Y)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 18-09 21:39
Over ranzig gesproken:

SQL:
1
2
select naam,charindex('dieenenaam',naam) as positie from tabel
order by positie desc,naam

Whatever


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:31

Gonadan

Admin Beeld & Geluid, Harde Waren
SQL:
1
2
3
4
5
6
7
8
(SELECT *
FROM personen
WHERE naam=dieene)
UNION
(SELECT *
FROM personen
WHERE naam!=dieene
ORDER BY naam ASC)

Ofzo? :?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 14-07 00:37

Shezzie

Lekker hoor!

code:
1
2
3
4
5
6
7
8
9
SELECT Naam, 
CASE Naam 
  WHEN 'watjewilt' THEN 0 
  ELSE 1 
END AS Idx

FROM Tabel

ORDER BY Idx ASC, Naam ASC


Doet het hier wel aardig :)

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gonadan schreef op woensdag 25 maart 2009 @ 17:12:
SQL:
1
2
3
4
5
6
7
8
(SELECT *
FROM personen
WHERE naam=dieene)
UNION
(SELECT *
FROM personen
WHERE naam!=dieene
ORDER BY naam ASC)

Ofzo? :?
Die order by gaat over de hele union ...

[ Voor 36% gewijzigd door kenneth op 25-03-2009 17:16 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:31

Gonadan

Admin Beeld & Geluid, Harde Waren
kenneth schreef op woensdag 25 maart 2009 @ 17:16:
Die order by gaat over de hele union ...
Ook met haakies?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 14-07 00:37

Shezzie

Lekker hoor!

@Kenneth

Jawel hoor, sorteert netjes. Aangezien Idx voor de andere namen gelijk is sorteert hij op de 2e voordwaarde, namelijk de naam. Try it :P

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gonadan:
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'ORDER'.
Shezzie, ja ik had er overheen gekeken :) Had m'n post al gewijzigd ;)

Maar dan nog, ik was lekker eerderder O-)

[ Voor 46% gewijzigd door kenneth op 25-03-2009 17:22 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:31

Gonadan

Admin Beeld & Geluid, Harde Waren
Vaag, maar het blijkt dat de UNION de sortering alsnog vernaggeld.
Je moet dus inderdaad zo'n truukje gebruiken zoals jullie gedaan hebben.

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Vernaggelt? Gewoon specified behaviour, een union levert gewoon 1 set op, hoe wil je die in twee delen sorteren?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:31

Gonadan

Admin Beeld & Geluid, Harde Waren
kenneth schreef op woensdag 25 maart 2009 @ 17:28:
Vernaggelt? Gewoon specified behaviour, een union levert gewoon 1 set op, hoe wil je die in twee delen sorteren?
Misschien door de sets te sorteren voordat je ze aan elkaar plakt? :?
Dat werkt ook gewoon hoor, alleen geeft de UNION weer een ongesorteerde set terug.
Hij plakt ze dus niet aan elkaar maar maakt een nieuwe set, niet wat ik zou verwachten.
Dat het specified is betekent nog niet dat ik het logisch vind.
Helaas bestaat APPEND dan niet. ;)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 10:35

BCC

Waarom doet iedereen zo ingewikkeld?
code:
1
 SELECT *, name='jantje' AS sort_field FROM names ORDER BY sort_field DESC, name;

[ Voor 34% gewijzigd door BCC op 25-03-2009 20:10 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het hele idee van een union is dat het geen twee losse sets zijn: een union is een vereniging. De sets worden dan ook niet aan elkaar geplakt: als x in A en x in B, dan zal voor A ∪ B het element x slechts één keer weergegeven worden en kan je dus niet zeggen uit welke verzameling die x komt, dus kan er niet gesorteerd worden per set.
BCC schreef op woensdag 25 maart 2009 @ 20:04:
Waarom doet iedereen zo ingewikkeld?
code:
1
 SELECT *, STRCMP(name,'jantje')=0 AS sort_field FROM names order by sort_field DESC, name;
Dat is gewoon een variant op het antwoord dat allang gegeven is. Wat maakt onze antwoorden zo ingewikkeld? Daarbij kent MSSQL2k5 STRCMP niet :*

Hmm, je hebt je post gewijzigd.
BCC schreef op woensdag 25 maart 2009 @ 20:04:
Waarom doet iedereen zo ingewikkeld?
code:
1
 SELECT *, name='jantje' AS sort_field FROM names ORDER BY sort_field DESC, name;
Ook dat werkt niet. Waarom doe je zo ingewikkeld? :+

[ Voor 49% gewijzigd door kenneth op 25-03-2009 20:15 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:31

Gonadan

Admin Beeld & Geluid, Harde Waren
kenneth schreef op woensdag 25 maart 2009 @ 20:09:
Het hele idee van een union is dat het geen twee losse sets zijn: een union is een vereniging. De sets worden dan ook niet aan elkaar geplakt: als x in A en x in B, dan zal voor A ∪ B het element x slechts één keer weergegeven worden en kan je dus niet zeggen uit welke verzameling die x komt, dus kan er niet gesorteerd worden per set.
Even vergeten, UNION ALL doet niet aan DISTINCT, UNION wel. Niet dat het voor dit resultaat veel uit maakt.

Wat ik bedoel is dat de twee sets die je maakt best te sorteren zijn, dat doet de server ook. Alleen heb je er inderdaad geen ruk aan. :+

Bestaat er uberhaupt zo'n soort append functie?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Haijo
  • Registratie: Februari 2006
  • Laatst online: 21-09-2024
Shezzie schreef op woensdag 25 maart 2009 @ 17:21:
@Kenneth

Jawel hoor, sorteert netjes. Aangezien Idx voor de andere namen gelijk is sorteert hij op de 2e voordwaarde, namelijk de naam. Try it :P
Hij retourneert alleen geen namen, alleen 0 of 1. ;) Daar schiet ik dus ook niets mee op. Ik vind eigenlijk dat het moet op de manier van negerzoen en dat ga ik ook proberen. :)

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.

Pagina: 1