SQL计数计数两次

时间:2015-09-24 15:40:25

标签: mysql sql sql-server

我遇到了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

1 个答案:

答案 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子句