SQL Count不同

时间:2011-06-08 14:28:12

标签: sql sql-server count

我有一个只计算的SQL查询,它返回正确的值,但是当我将其切片并获得不同区域的计数时,总计数不再与第一个匹配。

这就是我得到的:

表格zipcodes,包含CountyID,CountyName&邮递区号。

包含ShippingCountry&amp ;;的表订单ShippingZip

第一个计数如下:

SELECT COUNT(STFO.ShippingZip)
FROM Orders
WHERE 
AND STFO.intShippingCountryID = 202
AND STFO.ShippingZip IN (SELECT DISTINCT ZipCode FROM SwedishZipCodes07)
AND STFO.ShippingZip > 0

在一个例子中,我将这个数量计算为3007,这是正确的。 在我的下一个计数中,它看起来更像是这样:

SELECT DISTINCT CountyName, CountyID,
(SELECT COUNT(STFO.ShippingZip)
FROM Orders
WHERE 
AND STFO.intShippingCountryID = 202
AND STFO.ShippingZip IN (SELECT DISTINCT ZipCode FROM SwedishZipCodes07 WHERE CountyID = ZipWrapper.CountyID)
AND STFO.ShippingZip > 0) AS Count
FROM Zipcodes ZipWrapper
ORDER BY ZipWrapper.CountyID

在同一个例子中,我现在算得上像3018。 (在我的示例中,查询被过滤得更具体,但它们彼此匹配,差异在我的简化示例代码中)。

2 个答案:

答案 0 :(得分:1)

对于2个不同的CountyID,您可能拥有相同的STFO.ShippingZip。

这就是为什么在第二个查询中它会添加到每个CountyID,而在第一个查询中它只添加一次。

答案 1 :(得分:0)

以这种方式尝试:

SELECT CountyName, CountyID,
(
    SELECT COUNT(DISTINCT(STFO.ShippingZip))
    FROM Orders STFO, SwedishZipCodes07
    WHERE STFO.intShippingCountryID = 202
    AND STFO.ShippingZip > 0
    AND STFO.ShippingZip = SwedishZipCodes07.ZipCode
    AND SwedishZipCodes07.CountyId = ZipWrapper.CountyID

) AS Count
FROM Zipcodes ZipWrapper
ORDER BY ZipWrapper.CountyID