Creazione View che raggruppa piu' campi in uno solo

giovedì 19 novembre 2009 - 11.06

Teo Profilo | Junior Member

Ciao a tutti, spero si capisca qualcosa dal titolo che ho messo.

Ho una tabella cosi' composta:

CLIENTE | PROGRIGA | NOTA

quindi per ogni cliente posso avere N righe.
Avrei necessita' di creare una vista che mi raggruppi tutte le note in un campo solo, in modo da avere un'unica riga per ogni cliente.

Non avrei pero' idea di come farlo su una vista... avete qualche suggerimento?

Grazie.

Brainkiller Profilo | Guru

>Non avrei pero' idea di come farlo su una vista... avete
>qualche suggerimento?

Probabilmente si potrebbe fare qualcosa del genere tramite il pivot, ma secondo me è ostico.
Io farei due query, una sugli utenti e una sui campi nota.
E poi con due cicli for o foreach cicli sugli utenti e all'interno sulle note, filtrando per utente, e ti costruisci tu la stringa con dentro tutte le note.

Esempio

Utenti
1 David
2 Mario

Note
1 Nota1
1 Nota2
1 Nota3
2 Nota4
2 Nota5

ciclo su utenti
utente 1
filtro su note per utente 1
ciclo su note
note+= valore

alla fine note avrà questo contenuto "nota1, nota2, nota3"
mentre per l'utente 2 sarà "nota4, nota5"

Penso si sia capito.

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

Teo Profilo | Junior Member

Grazie, + o - credo di aver capito.
Ma posso ciclare all'interno di una view, con un WHILE od un FOR?

Teo Profilo | Junior Member

Al momento ho risolto in maniera diversa.
Quando ho un attimo provo a fare una funzione che cicla e ricava in un'unica variabile il contenuto di tutte le note, per poi provare ad inserirla in una view e vedere quanto ne risentono le prestazioni.
Grazie a tutti.

lbenaglia Profilo | Guru

>Al momento ho risolto in maniera diversa.
Come?

>Quando ho un attimo provo a fare una funzione che cicla e ricava
>in un'unica variabile il contenuto di tutte le note, per poi
>provare ad inserirla in una view e vedere quanto ne risentono
>le prestazioni.
Quando è possibile preferisco utilizzare tecniche alternative a cursori/cicli dato che in questo modo vincoli il DB Engine a ragionare a livello di riga, snaturando le potenzialità offerte da un RDBMS.
Una tecnica valida per SQL Server 2005 o superiore prevede di sfruttare le espressioni XPath mediante l'utilizzo della clausola FOR XML PATH:
http://groups.google.it/group/microsoft.public.it.sql/msg/8e03d60e1871fb41?hl=it

>Grazie a tutti.
Prego.

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

Teo Profilo | Junior Member

Ciao Grande Lorenzo!
Ho risolto in maniera non proprio ortodossa, ovvero sulla join della tabella n a molti ho aggiunto la clausola ProgRiga = 1, e costruendo diversamente il report su cui si basava la view: non sarebbe proprio esatto come metodo, perche' potrei avere note con progressivo di riga superiore a 1, nel caso in cui sia stata cancellata proprio la prima, pero' altrimenti non sapevo come uscirne velocemente.

Sono su SQL 2000 purtroppo, quindi non posso provare quanto da te suggerito.
Quindi l'unica soluzione corretta, e' quella di creare una funzione con un ciclo?

Grazie, ciao.

lbenaglia Profilo | Guru

>Sono su SQL 2000 purtroppo, quindi non posso provare quanto da
>te suggerito.
>Quindi l'unica soluzione corretta, e' quella di creare una funzione
>con un ciclo?
Questo thread solleticherà di certo il tuo intelletto:
http://groups.google.it/group/microsoft.public.it.sql/browse_frm/thread/25ec5df1a3d03ce9

>Grazie, ciao.
Prego.

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

Teo Profilo | Junior Member

Grazie mille, vado a studiarmi il tutto.
Ciao.
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