Ordinare risultati con spazi vuoti alla fine
-
lunedì 13 febbraio 2012 16:21
Salve a tutti, ho una domanda da fare. Avendo una query di estrazione dati, ordinata in ordine ascendente per nome ad esempio ,ottengo come ordinamento prima i risultati vuoti (campi dato di tipo string "") e poi i dati che cominciano per A fino alla Z
Come devo modificare la query in maniera da mettere gli spazi vuoti dopo la Z ??
Grazie!
p.s. non devo eliminare gli spazi vuoti,ma solo metterli dopo l ultima lettera dell alfabeto
Qui sotto c è la query esatta che dovrei modificare
"select ROW_NUMBER()over (order by nome) as 'Numero',* FROM ((select distinct nome,email) INTERSECT select (distinct nome,email)) as elenco_numerico"
- Modificato NikkySixx lunedì 13 febbraio 2012 17:23
Tutte le risposte
-
lunedì 13 febbraio 2012 22:49Moderatore
salve,
puoi impostare un ulteriore parametro di ordinamento "definendo" il criterio che "l'assenza di un valore" abbia un valore alto, un "valore vuoto" abbia un valore meno alto, e la presenza di un valore abbia un valore 0, quindi tipicamente, "se NULL = 2, se '' = 1, ELSE 0", per poi ordinare precisamente in base al nome, questo per comprendere anche l'eventualita' che la colonna sia nullabile e per definire un criterio diverso di ordinamento per il NULL stesso...
dovresti poi anche vedere la collation che stai utilizzando per comprendere l'ordinamente delle minuscole/maiuscole se intendi affrontarlo, come puoi vedere nell'esempio completo qui sotto,
SET NOCOUNT ON; USE tempdb; GO CREATE TABLE dbo.t ( Id int NOT NULL IDENTITY PRIMARY KEY, Nome varchar(10) DEFAULT '', eMail varchar(10) NOT NULL DEFAULT '' ); GO INSERT INTO dbo.t VALUES ( '', 'a.a.com'); INSERT INTO dbo.t VALUES ( 'b', 'b.a.com'); INSERT INTO dbo.t VALUES ( '', ''); INSERT INTO dbo.t VALUES ( NULL, 'NULL'); INSERT INTO dbo.t VALUES ( 'z', 'z.a.com'); INSERT INTO dbo.t VALUES ( 'Z', 'b.a.com'); INSERT INTO dbo.t VALUES ( 'A', 'c.a.com'); INSERT INTO dbo.t VALUES ( 'a', 'd.a.com'); GO SELECT DATABASEPROPERTYEX('tempdb', 'Collation') AS [My Default Database Collation] PRINT 'Ordinamento sul ''nome'' in base alla collation di default del database'; SELECT * FROM dbo.t t ORDER BY CASE WHEN t.Nome = '' THEN 1 ELSE 0 END, t.Nome; PRINT 'Ordinamento sul ''nome'' in base alla collation binaria Latin_General'; SELECT * FROM dbo.t t ORDER BY CASE WHEN t.Nome IS NULL THEN 2 WHEN t.Nome = '' THEN 1 ELSE 0 END ASC, t.Nome COLLATE Latin1_General_100_BIN; PRINT 'Ordinamento sul ''nome'' in base alla collation Latin_General Case Insensitive'; SELECT * FROM dbo.t t ORDER BY CASE WHEN t.Nome IS NULL THEN 2 WHEN t.Nome = '' THEN 1 ELSE 0 END ASC, t.Nome COLLATE Latin1_General_100_CI_AI; PRINT 'Ordinamento sul ''nome'' in base alla collation Latin_General Case Sensitive'; SELECT * FROM dbo.t t ORDER BY CASE WHEN t.Nome IS NULL THEN 2 WHEN t.Nome = '' THEN 1 ELSE 0 END ASC, t.Nome COLLATE Latin1_General_100_CS_AI; GO DROP TABLE dbo.t; --<---------- My Default Database Collation ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Latin1_General_CI_AS Ordinamento sul 'nome' in base alla collation di default del database Id Nome eMail ----------- ---------- ---------- 4 NULL NULL 7 A c.a.com 8 a d.a.com 2 b b.a.com 5 z z.a.com 6 Z b.a.com 3 1 a.a.com Ordinamento sul 'nome' in base alla collation binaria Latin_General Id Nome eMail ----------- ---------- ---------- 7 A c.a.com 6 Z b.a.com 8 a d.a.com 2 b b.a.com 5 z z.a.com 1 a.a.com 3 4 NULL NULL Ordinamento sul 'nome' in base alla collation Latin_General Case Insensitive Id Nome eMail ----------- ---------- ---------- 7 A c.a.com 8 a d.a.com 2 b b.a.com 5 z z.a.com 6 Z b.a.com 3 1 a.a.com 4 NULL NULL Ordinamento sul 'nome' in base alla collation Latin_General Case Sensitive Id Nome eMail ----------- ---------- ---------- 8 a d.a.com 7 A c.a.com 2 b b.a.com 5 z z.a.com 6 Z b.a.com 3 1 a.a.com 4 NULL NULL
saluti
http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools http://www.hotelsole.com/
- Contrassegnato come risposta NikkySixx martedì 6 marzo 2012 08:08

