使用sum运算符的不同查询无法正常工作?

时间:2012-03-21 01:23:11

标签: sql sql-server sql-server-2008

我有一个问题,我有这个查询,我应该通过PIX_SKU拉出总计组。我的问题是数量翻倍,任何帮助都会让人欣赏。

SELECT DISTINCT(A2.PIX_SKU), A2.PIX_DATE, SUM(A1.ID_QTY) AS TOTAL
FROM IDCASE00_EXTRACT A1,PX_CLEAN A2
WHERE A1.ID_SKU = A2.PIX_SKU
GROUP BY A2.PIX_SKU, A2.PIX_DATE

以下是表IDCASE00_EXTRACT

的一些数据
   id_sku                  id_ty       
301110  39  8               3266         
301110  39  8               1788         
301112  90  1               4           
301185  20  6               6580        
301185  20  6               22028       

以下是表PX_CLEAN

的一些数据
  pix_sku           pix_date
301110  39  8       20120203
301112  90  1       20120204
301185  20  6       20120320
301110  39  8       20120301
301185  20  6       20120209

3 个答案:

答案 0 :(得分:5)

您的加入是问题......

IDCASE00_EXTRACT中,您有两行id_sku = 301110 39 8

PX_CLEAN中,您还有两行pix_sku = 301110 39 8

所以当你加入id_sku = pix_sku时,你会产生4行(2 * 2)。

因此,加入这两个表的匹配目前不是唯一的 - IDCASE00_EXTRACT中的日期应与pix_date中的PX_CLEAN匹配吗?

答案 1 :(得分:2)

此查询应该为您提供每个SKU的总计:

SELECT Q.ID_SKU, SUM(Q.ID_qty) AS TOTAL
FROM   IDCASE00_EXTRACT AS Q
GROUP BY Q.ID_SKU

你打算用pix_date做什么?这些数据有什么用处?

我能想到的唯一其他信息是:

SELECT T.ID_SKU, T.TOTAL, PX.pix_date
FROM
     (  
     SELECT Q.ID_SKU, SUM(Q.ID_qty) AS TOTAL
     FROM   IDCASE00_EXTRACT AS Q
     GROUP BY Q.ID_SKU
     ) 
     AS T JOIN PX_CLEAN AS PX ON (T.ID_SKU = PX.pix_sku)

无论如何,您必须澄清要检索的信息。

答案 2 :(得分:0)

此查询:

SELECT pix_sku, SUM(id_qty) AS QuantityTotal
FROM @PX_CLEAN AS P
    JOIN @IDCASE00_EXTRACT AS Q ON (Q.id_sku = P.pix_sku)
GROUP BY pix_sku

将获得这些结果:

  • SKU | TOTAL
  • 301110 39 8 | 10108
  • 301112 90 1 | 4
  • 301185 20 6 | 57216

对于每个SKU,你有一个总数。

你想从pix_date得到什么?您聚合时只有 ONE sku,但每个SKU仍有几个日期。你想要得到什么?你想知道什么?

你应该停止考虑DISTINCT功能。此函数仅从查询结果中删除完全相同的。只有当你得到你想要的结果时它才有用 - 但是有多条线是相同的。查询引擎不会“理解”您的愿望,只为每个SKU返回1行,具有不同,只能通过聚合(分组依据)实现。