Allineare tutti i dati in una sola riga di result

giovedì 07 gennaio 2016 - 10.30
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

trinity Profilo | Guru

Salve buongiorno e buon anno

io ho le seguenti tabelle:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

in sostanza gli id_scheda devono essere posizionati su un'unica riga

Grazie mille ciao a tutti

Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

renarig Profilo | Expert

> In pratica mi serve creare una query di select o stored quello che sia che mi dia il result con i dati tutti allineati su un'unico record esempio:
> -- id_prat ---- id_clie ----- id-scheda
> ----- 1 ----------- 1 -------- 1 - 2 - 3 - 4- 5
> ----- 2 ----------- 2 -------- 1 - 2 - 3
Penso che come risultato intendevi dire questo ???


Solitamente queste cose si fanno nella applicazione,
se invece vuoi/devi farlo con SQLServer allora hai 2 possibilita'

1)
sei matematicamente certo che per ogni pratica NON possono esserci piu di n schede
allora ti fai una SELECT con n campi e con ausilio di ROWNUMER smisti i valori
per poi fare una bella concatenata finale

2)
fai una tabella temporanea
fai un ciclo su id_prat
fai un sottociclo su id_scheda (per ogni id_prat)
metti i valori del sottociclo in una variabile che si incrementa
a fine sottociclo metti il valore della variabile nella temporanea


certamente è molto più facile da realizzare la prima soluzione
direi a sensazione che la prima è anche più performante
pero la prima è meno "professionale"

Facci sapere

.

trinity Profilo | Guru

Grazie allora la farei anche nell'applicazione ma non so come, comunque ci possono essere diverse pratiche con diversi clienti ossia:

pratica 1 clienti 1
pratica 2 cliente 1
pratica 3 cliente 2
pratica 4 cliente 2

il numero pratiche è un progressivo quindi non ci saranno mai uguali ma un cliente può avere + di una pratica

con il rownumber puoi farmi vedere qualche esempio?

e se volessi gestire nell'applicazione (dato che è pure web) senza utilizzare molto il db come dovrei fare?

grazie
Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

renarig Profilo | Expert

>e se volessi gestire nell'applicazione (dato che è pure web)
>senza utilizzare molto il db come dovrei fare?
dipende da quale applicazione usi, ASP, php, altre ???
io comunque non sono forte nelle applicazioni web
( veramente anche in SQLServer mi arrangio appena )

comunque le stesse viste o stored che faresti nel DB le sposti nella
applicazione che comunque per eseguirle si appoggia al lavoro del DB




>con il rownumber puoi farmi vedere qualche esempio?
posto sotto la base di 4 viste elementari "a treno" fra di loro
messe in una CTE

ho ipotizzato un massimo di 12 schede per ogni pratica (record)

poi vedi te se vuoi farne 4 viste singole oppure una stored
USE Trinity GO WITH W01 AS ( SELECT Id_prat, Id_scheda, ROW_NUMBER() OVER (PARTITION BY Id_prat ORDER BY Id_scheda) AS RowN FROM dbo.Pratiche_righe ), W03 AS ( SELECT Id_prat, CASE WHEN RowN = 1 THEN Id_scheda END AS r01, CASE WHEN RowN = 2 THEN Id_scheda END AS r02, CASE WHEN RowN = 3 THEN Id_scheda END AS r03, CASE WHEN RowN = 4 THEN Id_scheda END AS r04, CASE WHEN RowN = 5 THEN Id_scheda END AS r05, CASE WHEN RowN = 6 THEN Id_scheda END AS r06, CASE WHEN RowN = 7 THEN Id_scheda END AS r07, CASE WHEN RowN = 8 THEN Id_scheda END AS r08, CASE WHEN RowN = 9 THEN Id_scheda END AS r09, CASE WHEN RowN = 10 THEN Id_scheda END AS r10, CASE WHEN RowN = 11 THEN Id_scheda END AS r11, CASE WHEN RowN = 12 THEN Id_scheda END AS r12 FROM W01 ), W05 AS ( SELECT Id_prat, SUM(r01) AS s01, SUM(r02) AS s02, SUM(r03) AS s03, SUM(r04) AS s04, SUM(r05) AS s05, SUM(r06) AS s06, SUM(r07) AS s07, SUM(r08) AS s08, SUM(r09) AS s09, SUM(r10) AS s10, SUM(r11) AS s11, SUM(r12) AS s12 FROM W03 GROUP BY Id_prat ), W07 AS ( SELECT dbo.Pratiche.Id_prat, dbo.Pratiche.Id_clie, W05.s01, W05.s02, W05.s03, W05.s04, W05.s05, W05.s06, W05.s07, W05.s08, W05.s09, W05.s10, W05.s11, W05.s12 FROM dbo.Pratiche LEFT OUTER JOIN W05 ON dbo.Pratiche.Id_prat = W05.Id_prat ) SELECT * FROM W07


diversamente bisogna fare il ciclo,
ma ormai è gia notte, poi mi sa che è
abbastanza complesso ( almeno per me )

pero sto rimeditando,
il grandissimo vantaggio del ciclo è che non devi sapere a priori
quante schede per ogni pratica

pero poi te devi alimentare una pagina WEB e mi sa
che comunque DEVI saperlo a priori .......

facci sapere


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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5