|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
[VB] La funzione SUM() su SQL Server 2000
Devo fare la somma di un campo della mia Tabella, il Campo "Quantita",
in MySQL esiste la funzione SUM(#nome_campo_da_sommare#), SELECT ID,Nome,Cognome,SUM(Quantita) FROM Contatti ma in sql server 2000 come si fa ??? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
Esattamente nello stesso modo
magari ti consigli di cambiarla così è più chiara... almeno per me SELECT ID,Nome,Cognome,SUM(Quantita) AS TotaleQuantita FROM Contatti |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Le funzioni di aggregazione quali Sum, Max, Min, Avg sono solitamente standard in tutti i linguaggi SQL...
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
FUNZIONA!!!
Codice:
Dim oComm As New SqlCommand("SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,Quantita FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = '" & lwClientResoconto.SelectedItems.Item(0).Text & "'", oConn) Con "SUM()" NON FUNZIONA!!! Codice:
Dim oComm As New SqlCommand("SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,SUM(Quantita) FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = '" & lwClientResoconto.SelectedItems.Item(0).Text & "'", oConn) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
beh è normale se i campi che hai nella SELECT e su cui non fai SUM() non li includi in una grausola "GROUP BY" se li vuoi raggruppare per ID_Articolo, ID_Cliente ecc...
Altrimenti li ltogli e lasci solo la SUM() |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Mi estrae solo il primo Articolo e poi mi da Errore ancora prima di estrarre la prima Quantita...
Codice:
oConn.Open() Dim oComm As New SqlCommand("SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,SUM(Quantita) FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = '" & lwClientResoconto.SelectedItems.Item(0).Text & "' GROUP BY Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Dim oRead As SqlDataReader = oComm.ExecuteReader While oRead.Read() li = lwResocontoTotale.Items.Add(oRead("Articolo")) li.SubItems.Add(oRead("Quantita")) End While oConn.Close() |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Infatti... La Sum deve ritornare un solo record...quindi o metti come solo campo del risultato della query una Sum o devi usare Group By...
Nel secondo caso nella Select puoi selezionare solamente i campi per i quali raggruppi o campi per i quali non raggruppi, ma per cui specifichi una funzione di aggregazione (come ad esempio al Sum)... Un esempio: SELECT Nome, Cognome, Count(IDFattura) As NumeroFatture, Sum(Importo) As TotaleImporto FROM AnagraficaClienti, Fatture WHERE AnagraficaClienti.IDCliente = Fatture.IDClient GROUP BY Nome, Cognome |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 1999
Città: Sesto Fiorentino, Firenze
Messaggi: 8444
|
hai provato ad eseguire la query nel Query Analyzer?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Comuqnue VB non è l'ambiente migliore per testare le query...molto meglio testarle con un client testuale almeno si possono fare cambiamenti e test molto più velocemente che in un programma completo...
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Quote:
Scusa ma, "NumeroFatture" e "TotaleImporto" sono due nomi delle tue tabelle ??? |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No sono il nome delle collone del risultato della query in cui verranno riportate le varie somme e conteggi...
Ti faccio un esempio... Tabella Fatture IDFattura IDCliente Importo 1 1 100 2 1 200 3 2 111 4 2 100 5 1 200 Tabella AnagraficaClienti IDCliente Nome Cognome 1 Pinco Pallino 2 Tizio Caio Il risultato della query sarà : Nome Cognome NumeroFatture TotaleImporto Pinco Pallino 3 500 Tizio Caio 2 211 Comunque questo sono cose abbastanza base dell'SQL... Ti conviene dare un'occhiata a qualche guida...anche su internet... |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Scusami ma ho trovato un altro metodo, e forse piu' facile ma non mi funziona!!!
Codice:
Dim oComm As New SqlCommand("SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,(SELECT SUM(Quantita) FROM Consistenza C WHERE C.ID_Articolo = Consistenza.ID_Articolo) FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = '" & lwClientResoconto.SelectedItems.Item(0).Text & "'", oConn) |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Quote:
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
FUNZIONA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Codice:
Dim oComm As New SqlCommand("SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,(SELECT SUM(Quantita)FROM Consistenza C WHERE C.ID_Articolo = Consistenza.ID_Articolo)AS Quantita FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = '" & lwClientResoconto.SelectedItems.Item(0).Text & "'", oConn) |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
vorrei chiedere solamente un ultima cosa e poi ho finito questa query......
alla solita Query in questione, dovrei fargli fare pure uno smaltimento degli Articoli identici, cioe': Di tutti gli "Articoli" con Nome identico che trova nella Tabella "Consistenza", ne deve visualizzare solo uno, CHIARAMENTE!!! la frase esatta e' : di tutti gli "ID_Articolo" che trovi nella Tabelle "Consistenza", visualizzane solo uno, MA!!! pur continuando a Sommare TUTTE le Celle "Quantita"......... LE MIE TABELLE: 1)Consistenza = |ID_Articolo|ID_Client|Quantita| 2)Client = |ID|Nome|Cognome| 3)Articoli = |ID|Articolo| Ci possiamo arrivare ??? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
SQL Server dovrebbe supportare anche le subquery nel from:
SELECT DISTINCT * FROM (la tua query) Attento al formato della query...non so se bisogna usare le tonde o le quadre...oppure se c'è bisogno di rinominare la query per assegnargli un nome... In Access si fa così (mi sembra): SELECT DISTINCT * FROM [la tua query]. AS Tabella; Comunque...ripeto...queste cose sono abbastanza basilari per chi deve lavorare con MS SQL...ti conviene cercare una guida per l'SQL di MS SQL... |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Ho provato a fare questo tentativo MA!!!!!!
Codice:
SELECT DISTINCT ID_Articolo FROM (SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,(SELECT SUM(Quantita)FROM Consistenza C WHERE C.ID_Articolo = Consistenza.ID_Articolo)AS Quantita FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = 1)AS Consistenza Server: messaggio 8156, livello 16, stato 1, riga 1 La colonna 'ID' è stata specificata più volte per 'Consistenza'. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non la puoi richiamare nuovamente Consistenza...dagli un altro nome...
Inoltre devi specificare * dopo distinct altrimenti nel risultato trovi solamente gli ID... |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Aug 2000
Messaggi: 1209
|
Quote:
Codice:
SELECT DISTINCT * FROM (SELECT Consistenza.ID_Articolo,Consistenza.ID_Client,Articoli.ID,Client.ID,Articolo,(SELECT SUM(Quantita)FROM Consistenza C WHERE C.ID_Articolo = Consistenza.ID_Articolo)AS Quantita FROM Consistenza,Client,Articoli WHERE Consistenza.ID_Articolo = Articoli.ID AND Consistenza.ID_Client = Client.ID AND ID_Client = 1)AS Consistenza2 Server: messaggio 8156, livello 16, stato 1, riga 1 La colonna 'ID' è stata specificata più volte per 'Consistenza2'. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:12.



















