我遇到了SQL语句的问题,对SQL没有过多的经验并且已经走到了尽头。我试图返回所挑选物品的数量和要挑选的物品数量。该声明的工作原因是它返回一个计数,但计数是它应该是的两倍,即1以2等进入。任何人都可以指出我错过了什么?所有帮助表示赞赏。感谢
SELECT b.BoxID AS BoxID
,p.productCode AS ProductCode
,ol.ProductID AS ProductID
,COUNT(OI.Picked) AS PickCount
,COUNT(OI.[Identity]) AS NeededCount
,shortDesc
,OL.PickLocation
,OL.PickZone
FROM OrderLine OL
INNER JOIN Products P ON ol.ProductID = p.ProductID
INNER JOIN OrderItem OI ON OL.[Identity] = OI.OrderLineIdentity
INNER JOIN Boxes b ON OI.BoxID = b.BoxID
INNER JOIN PickingLog pl ON b.BoxID = pl.BoxID
WHERE B.BoxBarcode = @BoxBarcode
GROUP BY b.BoxID
,p.productCode
,ol.ProductID
,shortDesc
,OL.PickLocation
,PL.PickingEnd
,OL.PickZone
ORDER BY OL.PickZone
一些示例结果
粗体数字是挑选的物品和所需的物品。这些应该是1,他们目前是2和2,他们目前是4.
5168 A264 27018 **2 2** Colour: Black A04D021 A
5168 A946-41.5 27523 **2 2** Size 41.5. UK Size 7/8. US Size: M8/W10 A02C049 A
5168 A978 27594 **2 2** Size: One Size A03C022 A
5168 E915 33157 0 **4** Red. 100% cotton. Size: 30 x 20". B03E024 B
5168 A026-M 26919 0 **2** Waist size: M (34" - 36") D03E019 D
答案 0 :(得分:0)
以下是解决此类问题的方法。选择一个给出重复的行,比如BoxId = 5,然后运行一个没有分组的语句并计数,只查看该ID
SELECT b.BoxID as BoxID, p.productCode as ProductCode, ol.ProductID
,OI.Picked,OI.[Identity], shortDesc, OL.PickLocation, OL.PickZone from OrderLine OL
join Products P on ol.ProductID = p.ProductID
join OrderItem OI on OL.[Identity] = OI.OrderLineIdentity
join Boxes b on OI.BoxID = b.BoxID
join PickingLog pl on b.BoxID = pl.BoxID
WHERE B.BoxBarcode= @BoxBarcode
AND B.Boxid=5
然后查看它返回的行数。有时候,你会在这里看到重复,因为你在这里有多个不同的记录,你没有认为有不同的记录。然后,您可以根据需要调整您的代码或期望。其他时候,您会看到重复的相同的记录。在这种情况下,请将每个连接表中的主键添加到所选列。可能,其中一个表有两个你要加入的条目。也许picklog有多个条目,但你只想要一个具有特定标志的条目(例如,current = 1)。一旦找到问题的位置,就可以将AND current = 1添加到该特定连接的ON子句