Newsgroup: it.comp.lang.visual-basic
Titolo: [SQL] Aggregazione

Ciao a tutti,
ho un problemino con il caldo! ;-)
Non riesco ad eseguire la seguente query di aggregazione, in quanto mi da
errore 3122:
Let sSQL = "SELECT [tblRiBoCarico].[ID]," _
        & " ([tblRiBoCarico].[nPrAcquisto] *" _
        & " [tblRiBoCarico].[nQuantita]) AS [nTotale]," _
        & " [tblAnGiornali].[sCoBarre] AS [sCoBarre]," _
        & " [tblAnGiornali].[sTitolo] AS [sTitolo]," _
        & " SUM([tblRiVendite].[nQuantita]) AS [nVenduti]" _
        & " FROM ([tblRiBoCarico]" _
        & " LEFT JOIN [tblAnGiornali] ON [tblAnGiornali].[ID] =" _
        & " [tblRiBoCarico].[IDGiornale])" _
        & " LEFT JOIN [tblRiVendite] ON [tblRiVendite].[IDRiBoCarico] =" _
        & " [tblRiBoCarico].[ID]" _
        & " GROUP BY [tblRiBoCarico].[ID]"
Alla fine mi trovo ad aggiungere tutti gli alias nella clausola GROUP BY
come segue:
Let sSQL = "SELECT [tblRiBoCarico].[ID]," _
        & " ([tblRiBoCarico].[nPrAcquisto] *" _
        & " [tblRiBoCarico].[nQuantita]) AS [nTotale]," _
        & " [tblAnGiornali].[sCoBarre] AS [sCoBarre]," _
        & " [tblAnGiornali].[sTitolo] AS [sTitolo]," _
        & " SUM([tblRiVendite].[nQuantita]) AS [nVenduti]" _
        & " FROM ([tblRiBoCarico]" _
        & " LEFT JOIN [tblAnGiornali] ON [tblAnGiornali].[ID] =" _
        & " [tblRiBoCarico].[IDGiornale])" _
        & " LEFT JOIN [tblRiVendite] ON [tblRiVendite].[IDRiBoCarico] =" _
        & " [tblRiBoCarico].[ID]" _
        & " GROUP BY [tblRiBoCarico].[ID]," _
        & " ([tblRiBoCarico].[nPrAcquisto] *" _
        & " [tblRiBoCarico].[nQuantita]), " _
        & " [sCoBarre], [sTitolo]"
E' normale che debba mettere tutta quella sfilza di campi nel GROUP BY?
Vorrei poi ricavare la Giacenza dalla differenza tra l'alias [nVenduti] e il
campo
[tblRiBoCarico].[nQuantita] e faccio in questo modo:
Let sSQL = "SELECT [tblRiBoCarico].[ID]," _
        & " ([tblRiBoCarico].[nPrAcquisto] *" _
        & " [tblRiBoCarico].[nQuantita]) AS [nTotale]," _
        & " [tblAnGiornali].[sCoBarre] AS [sCoBarre]," _
        & " [tblAnGiornali].[sTitolo] AS [sTitolo]," _
        & " SUM([tblRiVendite].[nQuantita]) AS [nVenduti]," _
        & " ([nVenduti] - [tblRiBoCarico].[nQuantita]) AS [nGiacenza]" _
        & " FROM ([tblRiBoCarico]" _
        & " LEFT JOIN [tblAnGiornali] ON [tblAnGiornali].[ID] =" _
        & " [tblRiBoCarico].[IDGiornale])" _
        & " LEFT JOIN [tblRiVendite] ON [tblRiVendite].[IDRiBoCarico] =" _
        & " [tblRiBoCarico].[ID]" _
        & " GROUP BY [tblRiBoCarico].[ID]," _
        & " ([tblRiBoCarico].[nPrAcquisto] *" _
        & " [tblRiBoCarico].[nQuantita]), " _
        & " ([nVenduti] - [tblRiBoCarico].[nQuantita])," _
        & " [sCoBarre], [sTitolo]"
Niente da fare, sempre errore 3122 "You tryed to execute a query that
doesn't
include the specified expression [nVenduti] - [tblRiBoCarico].[nQuantita] as
part of an aggregate function"
Che faccio, butto il PC nell'acquario? :-)
Un saluto,

 [tblRiBoCarico].[nQuantita] e faccio in questo modo:
Come fai tu non puoi farlo.
Però, teoricamente, se il carico è in più righe, puoi fare un Sum delle
singole differenze e dovrebbe darti lo stesso valore.
Su questo punto ho fatto molta fatica a capire la tua query (e non sono
neppure sicuro di averla capita tutta...).
Se posti un quesito di Sql, dovresti postare il codice Sql, non il codice VB
che lo genera, altrimenti diventa veramente illeggibile.
Ciao
Alberto

 singole differenze e dovrebbe darti lo stesso valore.
Grazie Alberto, credo di aver risolto!
Un saluto,