SQL 服务器不等于查询返回相等的值

SQL Server not equal query returning equal values

我在下面有一个查询,它正在比较两个相关的数据集,以查找其中一组的数量总和与另一组不匹配的行。作为参考,一个数据集是基于 PO (MRP) 的,一个是基于 SO 的 (ARUN),但它们在 PO 和 SO 编号以及 Material、销售订单项目等上链接。查询运行正常,但结果显示相等的值,而我的目标是指出它们不相等的地方。我将补充一点,这个正常的输出没有使用 SUMreturns 双行,因为每个数据集都有一个这些总计分成两行(货物被分开所以有不同的容器号)。我的目标是通过使用 SUM 函数摆脱它,并排除之前聚合的唯一字段。任何想法可能会发生什么?我已经包含了代码以及 SUM 和之前的结果。所以在 ARUN 中可以有一个唯一的容器编号,同样在 MRP 中可以有一个唯一的 Schedule Line

代码:

SELECT 
       M.STOCK_NUMBER AS [PO_NUMBER],
       M.MATERIAL, 
       M.MATERIAL_DESCRIPTION, 
       M.SIZE_LITERAL,
       A.GRID_VALUE,
       SUM(M.QUANTITY) AS [PO_QTY],
       SUM(A.QUANTITY) AS [SO_QTY],
       M.SALES_ORDER_NUMBER, 
       M.SALES_ORDER_ITEM_NUMBER, 
       M.CUSTOMER_NAME, 
       M.PLANNED_RECEIPT_DATE AS [ETA], 
       M.PLANT_CODE, 
       M.STOCK_TYPE



FROM   VW_MRP_ALLOCATION M
JOIN   VW_ARUN_NORM_NEW A   
ON     M.SALES_ORDER_NUMBER = A.SALES_ORDER_NUMBER
AND    M.SALES_ORDER_ITEM_NUMBER = A.SALES_ORDER_ITEM_NUMBER
AND    M.STOCK_NUMBER = A.SAP_PO_NUMBER
AND    M.SIZE_LITERAL = A.GRID_VALUE
AND    M.STOCK_TYPE = A.STOCK_TYPE
AND    M.MATERIAL = A.MATERIAL_NUMBER

WHERE  M.REQUIREMENT_TYPE = 'KE'
AND    M.STOCK_TYPE NOT IN ('A','C')
AND    M.STOCK_NUMBER IS NOT NULL
AND    M.QUANTITY <> A.QUANTITY

GROUP BY M.STOCK_NUMBER,
       M.MATERIAL, 
       M.MATERIAL_DESCRIPTION, 
       M.SIZE_LITERAL, 
       M.SALES_ORDER_NUMBER, 
       M.SALES_ORDER_ITEM_NUMBER, 
       M.CUSTOMER_NAME, 
       M.PLANNED_RECEIPT_DATE,
       M.PLANT_CODE, 
       M.STOCK_TYPE,
       A.GRID_VALUE

ORDER BY  M.STOCK_NUMBER,
          M.SIZE_LITERAL ASC

此代码产生以下结果(一行示例):

PO_NUMBER    MATERIAL           MATERIAL_DESCRIPTION                     SIZE_LITERAL GRID_VALUE PO_QTY                                  SO_QTY                                  SALES_ORDER_NUMBER SALES_ORDER_ITEM_NUMBER                 CUSTOMER_NAME                       ETA                     PLANT_CODE STOCK_TYPE
------------ ------------------ ---------------------------------------- ------------ ---------- --------------------------------------- --------------------------------------- ------------------ --------------------------------------- ----------------------------------- ----------------------- ---------- ----------
0283472626   D93889             ADI STAIRS MEN      BLACK                L            L          400                                     400                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                M            M          400                                     400                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                S            S          200                                     200                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                XL           XL         200                                     200                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L

如果我删除 SUM 并将 QUANTITY 添加到组中,我会得到:

PO_NUMBER    MATERIAL           MATERIAL_DESCRIPTION                     SIZE_LITERAL GRID_VALUE PO_QTY                                  SO_QTY                                  SALES_ORDER_NUMBER SALES_ORDER_ITEM_NUMBER                 CUSTOMER_NAME                       ETA                     PLANT_CODE STOCK_TYPE
------------ ------------------ ---------------------------------------- ------------ ---------- --------------------------------------- --------------------------------------- ------------------ --------------------------------------- ----------------------------------- ----------------------- ---------- ----------
0283472626   D93889             ADI STAIRS MEN      BLACK                L            L          28                                      372                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                L            L          372                                     28                                      6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                M            M          28                                      372                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                M            M          372                                     28                                      6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                S            S          14                                      186                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                S            S          186                                     14                                      6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                XL           XL         14                                      186                                     6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L
0283472626   D93889             ADI STAIRS MEN      BLACK                XL           XL         186                                     14                                      6194114805         10                                      ROSS STORES INC                     2018-02-28 00:00:00.000 6010       L

如果我理解你的逻辑正确,那么你应该比较 HAVING 子句中的两个总和:

SELECT
    M.STOCK_NUMBER AS [PO_NUMBER],
    M.MATERIAL, 
    M.MATERIAL_DESCRIPTION, 
    M.SIZE_LITERAL,
    A.GRID_VALUE,
    SUM(M.QUANTITY) AS [PO_QTY],
    SUM(A.QUANTITY) AS [SO_QTY],
    M.SALES_ORDER_NUMBER, 
    M.SALES_ORDER_ITEM_NUMBER, 
    M.CUSTOMER_NAME, 
    M.PLANNED_RECEIPT_DATE AS [ETA], 
    M.PLANT_CODE, 
    M.STOCK_TYPE
FROM VW_MRP_ALLOCATION M
INNER JOIN VW_ARUN_NORM_NEW A   
    ON M.SALES_ORDER_NUMBER = A.SALES_ORDER_NUMBER AND
       M.SALES_ORDER_ITEM_NUMBER = A.SALES_ORDER_ITEM_NUMBER AND
       M.STOCK_NUMBER = A.SAP_PO_NUMBER AND
       M.SIZE_LITERAL = A.GRID_VALUE AND
       M.STOCK_TYPE = A.STOCK_TYPE AND
       M.MATERIAL = A.MATERIAL_NUMBER
WHERE
    M.REQUIREMENT_TYPE = 'KE' AND
    M.STOCK_TYPE NOT IN ('A','C') AND
    M.STOCK_NUMBER IS NOT NULL AND
    M.QUANTITY <> A.QUANTITY
GROUP BY
    M.STOCK_NUMBER,
    M.MATERIAL, 
    M.MATERIAL_DESCRIPTION, 
    M.SIZE_LITERAL, 
    M.SALES_ORDER_NUMBER, 
    M.SALES_ORDER_ITEM_NUMBER, 
    M.CUSTOMER_NAME, 
    M.PLANNED_RECEIPT_DATE,
    M.PLANT_CODE, 
    M.STOCK_TYPE,
    A.GRID_VALUE
HAVING
    SUM(M.QUANTITY) <> SUM(A.QUANTITY)
ORDER BY
    M.STOCK_NUMBER,
    M.SIZE_LITERAL;