Slect

martedì 21 novembre 2006 - 16.46

ANNA79 Profilo | Junior Member

Ciao
Vi espongo un quesito
ho una tabella tiponumero con le seguenti colonne



Id descrizione
------------------------
1 Interno
2 domicilio
3 Cellulare
4 Urbano
5 FaxLDAP
6 InternoLDAP



io dovrei visualizzare su griglia prima il campo Interno,poi i campi FaxLDAP , InternoLDAP
e infine il resto dei campi.
Ora sicuro la order by non può essere fatta poichè non ho un risultato con una sequenza standard, ho pensato di creare un altra colonna con degli identificatori in modo tale da potermi creare la sequenza desiderata.



Id descrizione IdentificativoCampi
--------------------------------------------------------
1 Interno I
2 domicilio D
3 Cellulare C
4 Urbano U
5 FaxLDAP A
6 InternoLDAP A




Se seleziono il campo descrizione con identificativoCampi = I
prendo il mio campo descrizione Interno
poi selezionando il campo descrizione con identificativoCampi = A
prendo i campi FaxLDAP , InternoLDAP
e via di seguito



La domanda è :
innanzi tutto se qualcuno conosce un processo un pò più semplice per avere questo risultato
e se invece è corretto questo ragionamento, per ottenere tutte le righe con una select che query devo fare?



costruirò una statua doro a chiunque mi darà la soluzione

un grazie anticipato
Anna

lbenaglia Profilo | Guru

>io dovrei visualizzare su griglia prima il campo Interno,poi
>i campi FaxLDAP , InternoLDAP
>e infine il resto dei campi.

Ciao Anna,

la prima cosa che ci devi dire è il DBMS con il quale stai lavorando.
Supponendo di lavorare con SQL Server e considerando l'esiguo numero di righe, potresti adottare la seguente soluzione:

USE tempdb; CREATE TABLE dbo.TipoNumero( Id int NOT NULL PRIMARY KEY, descrizione varchar(15) NOT NULL ); INSERT dbo.TipoNumero VALUES(1, 'Interno'); INSERT dbo.TipoNumero VALUES(2, 'domicilio'); INSERT dbo.TipoNumero VALUES(3, 'Cellulare'); INSERT dbo.TipoNumero VALUES(4, 'Urbano'); INSERT dbo.TipoNumero VALUES(5, 'FaxLDAP'); INSERT dbo.TipoNumero VALUES(6, 'InternoLDAP'); GO SELECT * FROM dbo.TipoNumero ORDER BY CASE descrizione WHEN 'Interno' THEN 1 WHEN 'FaxLDAP' THEN 2 WHEN 'InternoLDAP' THEN 3 ELSE 99 END; /* Output: Id descrizione ----------- --------------- 1 Interno 5 FaxLDAP 6 InternoLDAP 2 domicilio 3 Cellulare 4 Urbano (6 row(s) affected) */ DROP TABLE dbo.TipoNumero;

Attenzione, in caso le righe siano molte (alcune migliaia) questa soluzione comporterà problemi di performances dato che quella clausola ORDER BY impedirà l'utilizzo di eventuali indici definiti sulla colonna descrizione causando un table scan (heap) oppure una scansione dell'intero indice clustered (se presente).

>un grazie anticipato
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ANNA79 Profilo | Junior Member

si è un Sql Server!!!!!!!
Grazie Grazie Grazie

quindi faccio un ordinamento con riferimento il campo ID senza dover creare un altra colonna ??



ciao
Anna

lbenaglia Profilo | Guru

>si è un Sql Server!!!!!!!
>Grazie Grazie Grazie
Che intuito, mamma mia...

>quindi faccio un ordinamento con riferimento il campo ID senza
>dover creare un altra colonna ??
Se le righe sono nell'ordine delle decine o centinaia direi che un eventuale indice non verrebbe nemmeno preso in considerazione, pertanto avverrebbe in ogni caso la scansione dell'intera tabella (heap) o dell'indice clustered (se presente), quindi puoi evitare di definire una nuova colonna ad-hoc per l'ordinamento, diversamente dovresti prevederla ed indicizzarla.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5