我有一个问题,我有这个查询,我应该通过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
答案 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,你有一个总数。
你想从pix_date得到什么?您聚合时只有 ONE sku,但每个SKU仍有几个日期。你想要得到什么?你想知道什么?
你应该停止考虑DISTINCT功能。此函数仅从查询结果中删除完全相同的行。只有当你得到你想要的结果时它才有用 - 但是有多条线是相同的。查询引擎不会“理解”您的愿望,只为每个SKU返回1行,具有不同,只能通过聚合(分组依据)实现。