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