Visualizzazione parte di dati di un DataTable

lunedì 02 marzo 2009 - 17.41

ysdemarc Profilo | Expert

ciao a tutti...

vi scrivo un esempio di quello che devo fare che forse vale più di mille parole..

ad esempio io ho un DataTable ottenuto da un select sql con dei dati simili a questo:

Nominativo ---- Prodotto ---- Quantità
A ---- prodotto 1 ------5
A ---- prodotto 2 ----- 8
B ---- prodotto 1 ----- 1
B ---- prodotto 4 ----- 10
C ---- prodotto 1 ----- 3
C ---- prodotto 3 ----- 2

però dopo aver ottenuto questi dati voglio l'elenco di chi ha più di 9 prodotti in totale
e quindi il risultato finale che desidero è:
A ---- prodotto 1 ------5
A ---- prodotto 2 ----- 8
B ---- prodotto 1 ----- 1
B ---- prodotto 4 ----- 10

poichè A ha 13 quantità, B 11 e C solo 5 e quindi va escluso.

L'unico modo che mi viene in mente è
o fare prima una selezione per la stessa queri per avere i totali generali filtrando per la quantità e poi fare la select sapendo con solo quei nominativi
oppure scorrere tutto il datatable fare i totali e poi eliminare tutti quei nominativi che non raggiungono il totale desiderato.

Tutti e due i modi mi sembrano prolissi in termine di tempo considerato che la query avviene on-line e la mole di dati da gestire..
e poi nel primo caso prosciugherei le risorse del server nel secondo costringerei l'utente ad attendere forse un pò troppo.

C'è qualche altra strada che potrei seguire?

anche mettendo mani nella select sql

supponendo che sia qualcosa del genere
SELECT NOMINATIVO
, PRODOTTO
, SUM(QUANTITA) AS QUANTITA
FROM TABELLA
GROUP BY NOMINATIVO
, PRODOTTO

(naturalmente la mia query è molto più ingarbugliata ed entrano in gioco molto più tabelle poivchè l'utente deve poter filtrare i dati anche per altri parametri)

spero di essere stato il più chiaro possibile...

grazie
Vincenzo
Programmatore sbilenco

Jeremy Profilo | Guru

Ciao Vincenzo.
Temo di non aver capito il problema....
Intendi dire così?:
SELECT NOMINATIVO, PRODOTTO, SUM(QUANTITA) AS TOTQUANTITA FROM TABELLA WHERE TOTQUANTITA > 9 GROUP BY NOMINATIVO, PRODOTTO

Facci sapere....
Ciao.

ysdemarc Profilo | Expert

ciao...

non intendo dire nel modo in cui hai inteso..

poichè la tua query mi tira fuori solo una riga in questo caso

B ---- prodotto 4 ----- 10


invece io vorrei sapere il totale di A di B e di C e poi potermi selezionare chi supera come quantità 9 e stampare i dettagli di ognuno e quindi come risultato finale filtrando per quantita > 9 vorrei ottenere questo:

Nominativo ---- Prodotto ---- Quantità
A ---- prodotto 1 ------5
A ---- prodotto 2 ----- 8
B ---- prodotto 1 ----- 1
B ---- prodotto 4 ----- 10

C'ho riflettuto è penso che il modo migliore sia utilizzare una sottoquery...

speravo però che il DataTable avesse qualcosa per farlo in automatico o meglio ancora qualche istruzione sql che lo potesse fase senza sovraccaricare il server..alla fine con la sottoquery sprecherei quasi risorse per due richieste

voi come fareste?
Vincenzo
Programmatore sbilenco

Jeremy Profilo | Guru

Ciao Vincenzo
prova un pò cosi:
SELECT NOMINATIVO, PRODOTTO, QUANTITA FROM TABELLA WHERE SUM(QUANTITA) > 9 GROUP BY NOMINATIVO, PRODOTTO
altrimenti non ho capito ancora e ti prego di scusarmi.

>speravo però che il DataTable avesse qualcosa per farlo in automatico
Il DataTable è un mero contenitore di dati come lo sono le tabelle del Db.

Facci sapere...
Ciao

ysdemarc Profilo | Expert

ciao, ti ringrazio..ma quello che mi scrivi non è quello che intendo..

tu così mi prendi solo le righe raggruppate per nome e prodotto con quantità > 9

otterrei solo questa riga:
B ---- prodotto 4 ----- 10

comunque al momento utilizzo una sub query in questo modo:

SELECT NOMINATIVO
, PRODOTTO
, SUM(QUANTITA) AS QUANTITA
FROM TABELLA
WHERE NOMINATIVO IN (SELECT NOMINATIVO FROM TABELLA WHERE SUN(QUANTITA) > 9 GROUP BY NOMINATIVO)
GROUP BY NOMINATIVO
, PRODOTTO


in pratica volevo evitare la sub query 1) per non sovraccaricare il DB
2) perchè le tabelle fanno a dir poco schifo...

ad esempio devo mettere in join una tabella1 con tabella2 con corrispondenza di colonne 1 a 2..
cioè la ia colonna nominativo può contenere 2 valori (ad esempio nome o alias) e la colonna che devo metter in join in vece contiene una colonna nominativo e una alias...

per cui è un gran bord.....ello

Vincenzo
Programmatore sbilenco
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