Skinnysite.net

... un modo di esprimersi.

Font Size

Cpanel

Ordinare i dati secondo una alternanza

Valutazione attuale:  / 0
ScarsoOttimo 

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
Sei qui: Home Code Snippets Transact-SQL Ordinare i dati secondo una alternanza