SQL 服务器不等于查询返回相等的值
SQL Server not equal query returning equal values
我在下面有一个查询,它正在比较两个相关的数据集,以查找其中一组的数量总和与另一组不匹配的行。作为参考,一个数据集是基于 PO (MRP) 的,一个是基于 SO 的 (ARUN),但它们在 PO 和 SO 编号以及 Material、销售订单项目等上链接。查询运行正常,但结果显示相等的值,而我的目标是指出它们不相等的地方。我将补充一点,这个正常的输出没有使用 SUM
returns 双行,因为每个数据集都有一个这些总计分成两行(货物被分开所以有不同的容器号)。我的目标是通过使用 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;
我在下面有一个查询,它正在比较两个相关的数据集,以查找其中一组的数量总和与另一组不匹配的行。作为参考,一个数据集是基于 PO (MRP) 的,一个是基于 SO 的 (ARUN),但它们在 PO 和 SO 编号以及 Material、销售订单项目等上链接。查询运行正常,但结果显示相等的值,而我的目标是指出它们不相等的地方。我将补充一点,这个正常的输出没有使用 SUM
returns 双行,因为每个数据集都有一个这些总计分成两行(货物被分开所以有不同的容器号)。我的目标是通过使用 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;