Domanda

Ho le seguenti domande,

QryStockOnHand
SELECT QrySaleTot.Item, QrySaleTot.ProductID, [QryStockLevel].[Stock]-[QrySaleTot].[Quantity] AS StockOnHand
FROM QryStockLevel INNER JOIN QrySaleTot ON QryStockLevel.ProductID = QrySaleTot.ProductID;

QrySaleTot
SELECT TblProduct.Item, Sum(TblTotalSale.Size) AS Quantity, TblProduct.ProductID
FROM TblProduct INNER JOIN TblTotalSale ON TblProduct.[ProductID] = TblTotalSale.[ProductID]
GROUP BY TblProduct.Item, TblProduct.ProductID;

QryStockLevel
SELECT TblStock.ProductID, Sum(TblStock.StockLevel) AS Stock, TblProduct.Item
FROM TblStock INNER JOIN TblProduct ON TblStock.ProductID = TblProduct.ProductID
GROUP BY TblStock.ProductID, TblProduct.Item;

Quando gestisco Qrystockonhand e non sono state effettuate vendite di un prodotto, il purdutto non appare nel risultato della query ...

Dati di esempio

TblStock
StockID ProductID   StockLevel
138 1   528
139 3   528
140 5   528
141 9   528
142 7   528
143 18  80
144 30  72
145 34  72
146 33  72
147 32  200 
148 22  80
149 19  80
150 23  80
151 20  80



TblProduct
ProductID   Item    Price   StockDelivery   PriceSmall  Large   Small
1   Carling         £2.50   528         £1.40           2   1
3   Carlsburg   £2.70   528         £1.60           2   1
5   IPA         £2.30   528         £1.20           2   1
7   StrongBow   £2.80   528         £1.65           2   1
9   RevJames    £2.45   528         £1.30           2   1
11  Becks           £2.90   72                      1   
12  WKDBlue     £2.80   72              1   
13  WKDRed          £2.80   72              1   
14  SmirnoffIce £2.80   72              1   



TblTotalSale
TotalSalesID    ProductID   SalePrice   Day Time    Size
576 1   £1.40   19/02/2012  15:34:24    1
528 1   £2.50   09/02/2012  14:44:44    2
530 1   £1.40   09/02/2012  14:44:44    1
565 1   £2.50   19/02/2012  15:34:24    2
567 1   £1.40   19/02/2012  15:34:24    1
570 3   £2.70   19/02/2012  15:34:24    2
571 3   £1.60   19/02/2012  15:34:24    1
577 3   £2.70   19/02/2012  15:34:24    2
578 3   £1.60   19/02/2012  15:34:24    1
533 3   £2.70   09/02/2012  14:44:44    2
534 3   £1.60   09/02/2012  14:44:44    1

Qualche idea per il motivo ... Immagino che sia una cosa nulla, in cui sta vedendo le vendite senza una cosa inesistente, invece di una vendita zero ... Qualche idea su come potrei risolverlo?

Grazie

Sam

È stato utile?

Soluzione

Invece di un join interno, usa un join esterno sinistro, che gli dirà di afferrare tutte le righe dalla tabella della mano sinistra sul join, anziché un join interno, che restituisce solo righe che hanno valori in entrambe le tabelle.

Non conosco i campi Qrystocklevel, ma la tua domanda dovrebbe assomigliare a questa:

SELECT QryStockLevel.Item, QryStockLevel.ProductID, [QryStockLevel].[Stock]-NZ([QrySaleTot].[Quantity],0) AS StockOnHand
FROM QryStockLevel LEFT OUTER JOIN QrySaleTot ON QryStockLevel.ProductID = QrySaleTot.ProductID;

Nota la funzione NZ per gestire un nulla sulla quantità quando QrySaletot non ha una riga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top