Ordinare i dati secondo una alternanza
- Dettagli
- Categoria principale: Code Snippets
- Categoria: Transact-SQL
- Pubblicato 12 Luglio 2012
- Visite: 272
Nello script sottostante riempio una tabella con alcuni dati casuali inseriti in ordine sparso.
Se si volesse alternare i dati secondo un certo criterio risulterebbe impossibile con il normale ordinamento sql.
Questo script, attraverso l'utilizzo della proprietà identity, carica un paio di tabelle temporanee nelle quali vengono depositati i dati secondo il criterio scelto per poi essere ordinati in modo alternato.
Il meccanismo ruota tutto intorno alla identity in quanto nella prima tabella il campo "prog_id" viene valorizzato partendo da 1 e incrementato con un passo di 2, nella seconda tabella invece "prog_id" viene valorizzato partendo da 2 e incrementato con un passo di 2 così nella prima tabella avrò un "prog_id" che avrà valori del tipo 1,3,5,7 ... mentre nella seconda tabella il "prog_id" avrà valori del tipo 2,4,6,8 ...
Così facendo con la union delle tabelle si otterà l'ordinamento alternato
create table #tbl(
campo_1 varchar(10),
campo_2 varchar(10)
)
insert into #tbl (campo_1, campo_2) values('a','1a')
insert into #tbl (campo_1, campo_2) values('a','1a')
insert into #tbl (campo_1, campo_2) values('b','ba')
insert into #tbl (campo_1, campo_2) values('a','1a')
insert into #tbl (campo_1, campo_2) values('b','1b')
insert into #tbl (campo_1, campo_2) values('b','1b')
insert into #tbl (campo_1, campo_2) values('a','1a')
insert into #tbl (campo_1, campo_2) values('b','1b')
insert into #tbl (campo_1, campo_2) values('b','1b')
insert into #tbl (campo_1, campo_2) values('a','1a')
--creao una tab. temporanea per scaricarci dentro il primo set di risultati
create table #tbl1(
prog_id int NOT NULL IDENTITY (1, 2),
campo_1 varchar(10),
campo_2 varchar(10)
)
--carico la tabella con il primo criterio
insert into #tbl1
select campo_1, campo_2 from #tbl where campo_1 = 'a'
--creao una tab. temporanea per scaricarci dentro il secondo set di risultati
create table #tbl2(
prog_id int NOT NULL IDENTITY (2, 2),
campo_1 varchar(10),
campo_2 varchar(10)
)
--carico la tabella con il secondo criterio
insert into #tbl2
select campo_1, campo_2 from #tbl where campo_1 = 'b'
--mostro il contenuto della tabella originaria
--e il risultato dell'ordinamento alternato
select * from #tbl
select campo_1, campo_2 from (
select * from #tbl1
union
select * from #tbl2
) v
DROP TABLE #tbl
DROP TABLE #tbl1
DROP TABLE #tbl2




