문제

I have the following queries,

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;

When I run the QryStockonHand and no sales of a product have been made then the porduct does not appear in the result of the query...

Sample Data

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

Any Idea why... I guess it is a null thing, where it is seeing the no sales as a non existent thing, instead of a zero sales.... any idea how i could fix it?

Thanks

Sam

도움이 되었습니까?

해결책

Instead of an inner join, use a left outer join, which will tell it to grab all of the rows from the left hand table on the join, instead of an inner join, which returns only rows which have values in both tables.

I don't know the QryStockLevel fields, but your query should look something like this:

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

Note the NZ function to handle a null on the Quantity when qrysaletot does not have a row.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top