7 messaggi dal 31 agosto 2006
Ciao ragazzi

il risultato di una query è una tabella di questo tipo

campo1 campo2

10 ciao
10 PINO
20 GINO
23 pippo
23 TINO

io dovrei riuscire con qualche espressione condizionale ad ottenere

campo1 campo2

10 ciao
20 GINO
23 pippo

io farei qualcosa del genere mi metto una variabile memoria='XXX'
cioè

if campo1<>memoria

prendo la riga
memoria = campo1
else

salto la riga

end if


Non ho idea se si possa fare qualcosa del genere a livello di programmazione SQL
voi avete qualche idea?
Grazie
Ciao
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Maurizio1980 ha scritto:

Non ho idea se si possa fare qualcosa del genere a livello di programmazione SQL
voi avete qualche idea?


Il più grande errore che si può commettere ragionando in T-SQL è utilizzare un approccio riga per riga. Questo tipo di approccio è utilizzabile ricorrendo ad un cursore ma ciò significa snaturare un database server, costringerlo a lavorare in un modo con cui NON è stato progettato e, pertanto, ucciderne le prestazioni.
LAvorando con un DBMS, ed in particolare con SQL Server, devi ragionare in maniera "set oriented". Nell'esempio che hai indicato non hai indicato il motivo per il quale, per il record con campo1 = 10 dovresti prendere "ciao" e non "Pino". Non puoi neanche ragionare sul "primo che ti viene restituito" perchè in funzione di quanto detto prima (ragionare in maniera "set-oriented" e non "row-oriented") non ha alcun senso parlare di "riga restituita per prima" in quanto il recordset che ti viene restituito ti viene restituito come unità di lavoro e non con un ragionamento "row-oriented". Anche perchè l'ordine di restituzione dei record, in assenza di una esplicita clausola di ordinamento, potrebbe variare da una esecuzione all'altra.

Dovresti quindi ragionare e formulare il perchè l'istruzione dovrebbe restituire "ciao" e non "Pino". Ad esempio potresti volere che, a parità di campo1, ti venga restituito quello con l'ordinamento alfabetico più basso e per far ciò puoi utilizzare l'istruzione

SELECT campo1, MIN(campo2)
FROM dbo.MyTable
GROUP BY campo1

Bye
7 messaggi dal 31 agosto 2006
In effetti non ero gran che convinto di quello che stavo chiedendo perchè mi sembrava poco logico, ma non si sa mai.

Cmq ho risolto riorganizzando meglio la query che facevo, non c'era bisogno di tutto questo accrocchio che ho chiesto.

Grazie mille

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.