在 SELECT 语句中动态设置变量
Set a variable dynamically within a SELECT statement
我有一个 SQL 数据库,其中包含多个 SAP 数据 table 和一个 SQL 语句,如下所示:
SELECT DISTINCT
AFKO.PLNBEZ AS 'Material',
MAKT.MAKTX AS 'Material Number',
AFKO.AUFNR AS 'Order',
AFVC.VORNR AS 'Operation Number',
CRTX.KTEXT AS 'Operation Text',
AFVV.VGW01 AS 'Estimated Hours 1',
AFVV.VGW02 AS 'Estimated Hours 2',
AFVV.VGW03 AS 'Estimated Hours 3',
AFVV.VGW04 AS 'Estimated Hours 4',
AFVV.VGW05 AS 'Estimated Hours 5',
AFVV.VGW06 AS 'Estimated Hours 6',
AFVV.ISM01 AS 'Actual Hours 1',
AFVV.ISM02 AS 'Actual Hours 2',
AFVV.ISM03 AS 'Actual Hours 3',
AFVV.ISM04 AS 'Actual Hours 4',
AFVV.ISM05 AS 'Actual Hours 5',
AFVV.ISM06 AS 'Actual Hours 6',
(SELECT TOP 1
AFRU.ISDD
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY ISDD ASC
) AS 'Op Actual Start Date',
(SELECT TOP 1
AFRU.ISDZ
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY ISDZ ASC
) AS 'Op Actual Start Time',
(SELECT TOP 1
AFRU.IEDD
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY IEDD DESC
) AS 'Op Actual Finish Date',
(SELECT TOP 1
AFRU.IEDZ
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY IEDD DESC
) AS 'Op Actual Finish Time',
AFVC.RUECK AS 'Confirmation Number',
AFVC.ARBID AS 'OBJID',
AFKO.GSTRI AS 'Order Actual Start Date',
AFKO.GETRI AS 'Order Confirmed Finish Date',
COUNT(AFRU.RUECK) AS "No. of Confirmations",
CASE
WHEN COUNT(AFRU.RUECK) = 0 THEN 'Confirmed on mass'
WHEN COUNT(AFRU.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS Accuracy
FROM AFKO
INNER JOIN afvc ON afvc.AUFPL = AFKO.AUFPL
LEFT OUTER JOIN AFRU afru.rueck = afvc.rueck
INNER JOIN MAKT ON AFKO.PLNBEZ = MAKT.MATNR
INNER JOIN CRHD ON crhd.OBJID = afvc.ARBID
INNER JOIN CRTX ON AFVC.ARBID = CRTX.OBJID
INNER JOIN AFVV ON AFVC.AUFPL = AFVV.AUFPL
AND AFVC.APLZL = AFVV.APLZL
INNER JOIN AUFK ON AFKO.AUFNR = AUFK.AUFNR
WHERE AUFK.WERKS = 1000
AND (crhd.ARBPL LIKE 'BSCREBAR'
OR crhd.ARBPL LIKE 'BSCFISET'
OR crhd.ARBPL LIKE 'BSCWDSP'
OR crhd.ARBPL LIKE 'BSCPRSET'
OR crhd.ARBPL LIKE 'BSCCAST'
OR crhd.ARBPL LIKE 'BSCDEMLD' )
GROUP BY AFKO.PLNBEZ, MAKT.MAKTX, AFKO.AUFNR, AFVC.VORNR, CRTX.KTEXT, AFVV.VGW01, AFVV.VGW02, AFVV.VGW03, AFVV.VGW04, AFVV.VGW05, AFVV.VGW06,
AFVV.ISM01, AFVV.ISM02, AFVV.ISM03, AFVV.ISM04, AFVV.ISM05, AFVV.ISM06, AFRU.ISDD, AFRU.ISDZ, AFRU.IEDD, AFRU.IEDZ, AFVC.RUECK, AFVC.ARBID, AFKO.GSTRI, AFKO.GETRI
;
问题是我的 COUNT(AFRU.RUECK) AS "No. of Confirmations",
returns 值不正确,我认为这与我的一个连接有关,但我不确定。
无论如何,我将 select 语句更改为:
(SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) AS 'No. of Confirmations',
CASE
WHEN (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) = 0 THEN 'Confirmed on mass'
WHEN (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS 'Accuracy'
效果很好,正是我想要的。然而,这并不是 select 处理数据的最有效方式。由于更改,该声明大约需要 10 分钟才能 运行。
所以我尝试将其从上面更改为:
@confs = (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK),
@confs AS 'No. of Confirmations',
CASE
WHEN (@confs) = 0 THEN 'Confirmed on mass'
WHEN (@confs) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS 'Accuracy'
为了消除额外的 SELECT
s,使用我在主 SELECT
上方声明的变量 - DECLARE @confs int;
.
但是,我遇到了一条错误消息:
Msg 141, Level 15, State 1, Line 3
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
我该如何解决这个问题?甚至有可能解决这个问题吗?
我在 SQL 中看到的每个声明变量的示例都排除了动态 where 子句。我特别需要引用另一个 table (AFRU
) 来获取特定确认号 (RUECK
) 的记录数量 - 它来自不同的 table (AFVC
),作为我的主要 select 声明的一部分。
编辑:
基于上面的 SQL 代码(在我进行任何更改之前),这是我的完整输出示例:
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| Material | Material Number | Order | Operation Number | Operation Text | Estimated Hours 1 | Estimated Hours 2 | Estimated Hours 3 | Estimated Hours 4 | Estimated Hours 5 | Estimated Hours 6 | Actual Hours 1 | Actual Hours 2 | Actual Hours 3 | Actual Hours 4 | Actual Hours 5 | Actual Hours 6 | Op Actual Start Date | Op Actual Start Time | Op Actual Finish Date | Op Actual Finish Time | Confirmation Number | OBJID | Order Actual Start Date | Order Confirmed Finish Date | No. of Confirmations | Accuracy |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-385 | Solid plank | 1713023 | 60 | BSC Casting | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200302 | 100959 | 20200302 | 121124 | 7566152 | 10000385 | 20200226 | 20200303 | 3 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-406 | Solid plank | 1713025 | 60 | BSC Casting | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200226 | 210329 | 20200226 | 210329 | 7566124 | 10000385 | 20200226 | 20200227 | 1 | Auto Confirmation |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-414 | Solid plank | 1713026 | 40 | BSC Primary Set | 2.132 | 0 | 0 | 0 | 0 | 0 | 0.19 | 0 | 0 | 0 | 0 | 0 | 20200227 | 142442 | 20200227 | 152927 | 7566106 | 10000383 | 20200227 | 20200303 | 2 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-436 | Solid plank | 1713028 | 60 | BSC Casting | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200224 | 142546 | 20200224 | 154025 | 7556163 | 10000385 | 20200221 | 20200225 | 2 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
我的 AFRU
table 看起来像这样(用于确认编号 0007566152
):
在我上面的例子中,'number of confirmations'是3
但是table实际上包含6条记录,这意味着3
的值不正确,它实际上应该说 6
.
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| RUECK | ERSDA | ERZET | ERNAM | WERKS | ISDD | ISDZ | IEDD | IEDZ | AUERU | AUFPL | APLZL | AUFNR | VORNR | fwk_LineageID | fwk_VersionID | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 121124 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 121124 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 102224 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 102224 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 102224 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 102224 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
在我的最高结果中,我希望看到该特定记录的值为 6,而不是 3。
您可以使用 outer apply
而不是 left join
。你也不需要 group by
SELECT
....,
AFKO.GSTRI AS 'Order Actual Start Date',
AFKO.GETRI AS 'Order Confirmed Finish Date',
T.[No. of Confirmations],
T.Accuracy
FROM AFKO
INNER JOIN afvc ON afvc.AUFPL = AFKO.AUFPL
INNER JOIN MAKT ON AFKO.PLNBEZ = MAKT.MATNR
INNER JOIN CRHD ON crhd.OBJID = afvc.ARBID
INNER JOIN CRTX ON AFVC.ARBID = CRTX.OBJID
INNER JOIN AFVV ON AFVC.AUFPL = AFVV.AUFPL
AND AFVC.APLZL = AFVV.APLZL
INNER JOIN AUFK ON AFKO.AUFNR = AUFK.AUFNR
OUTER APPLY ( SELECT
COUNT(A.RUECK) AS "No. of Confirmations",
CASE
WHEN COUNT(A.RUECK) = 0 THEN 'Confirmed on mass'
WHEN COUNT(A.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS Accuracy
FROM AFRU A WHERE A.RUECK = AFVC.RUECK ) AS T
WHERE AUFK.WERKS = 1000
AND (crhd.ARBPL LIKE 'BSCREBAR'
OR crhd.ARBPL LIKE 'BSCFISET'
OR crhd.ARBPL LIKE 'BSCWDSP'
OR crhd.ARBPL LIKE 'BSCPRSET'
OR crhd.ARBPL LIKE 'BSCCAST'
OR crhd.ARBPL LIKE 'BSCDEMLD' )
我有一个 SQL 数据库,其中包含多个 SAP 数据 table 和一个 SQL 语句,如下所示:
SELECT DISTINCT
AFKO.PLNBEZ AS 'Material',
MAKT.MAKTX AS 'Material Number',
AFKO.AUFNR AS 'Order',
AFVC.VORNR AS 'Operation Number',
CRTX.KTEXT AS 'Operation Text',
AFVV.VGW01 AS 'Estimated Hours 1',
AFVV.VGW02 AS 'Estimated Hours 2',
AFVV.VGW03 AS 'Estimated Hours 3',
AFVV.VGW04 AS 'Estimated Hours 4',
AFVV.VGW05 AS 'Estimated Hours 5',
AFVV.VGW06 AS 'Estimated Hours 6',
AFVV.ISM01 AS 'Actual Hours 1',
AFVV.ISM02 AS 'Actual Hours 2',
AFVV.ISM03 AS 'Actual Hours 3',
AFVV.ISM04 AS 'Actual Hours 4',
AFVV.ISM05 AS 'Actual Hours 5',
AFVV.ISM06 AS 'Actual Hours 6',
(SELECT TOP 1
AFRU.ISDD
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY ISDD ASC
) AS 'Op Actual Start Date',
(SELECT TOP 1
AFRU.ISDZ
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY ISDZ ASC
) AS 'Op Actual Start Time',
(SELECT TOP 1
AFRU.IEDD
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY IEDD DESC
) AS 'Op Actual Finish Date',
(SELECT TOP 1
AFRU.IEDZ
FROM AFRU
WHERE AUFNR = AFKO.AUFNR
AND RUECK = AFVC.RUECK
ORDER BY IEDD DESC
) AS 'Op Actual Finish Time',
AFVC.RUECK AS 'Confirmation Number',
AFVC.ARBID AS 'OBJID',
AFKO.GSTRI AS 'Order Actual Start Date',
AFKO.GETRI AS 'Order Confirmed Finish Date',
COUNT(AFRU.RUECK) AS "No. of Confirmations",
CASE
WHEN COUNT(AFRU.RUECK) = 0 THEN 'Confirmed on mass'
WHEN COUNT(AFRU.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS Accuracy
FROM AFKO
INNER JOIN afvc ON afvc.AUFPL = AFKO.AUFPL
LEFT OUTER JOIN AFRU afru.rueck = afvc.rueck
INNER JOIN MAKT ON AFKO.PLNBEZ = MAKT.MATNR
INNER JOIN CRHD ON crhd.OBJID = afvc.ARBID
INNER JOIN CRTX ON AFVC.ARBID = CRTX.OBJID
INNER JOIN AFVV ON AFVC.AUFPL = AFVV.AUFPL
AND AFVC.APLZL = AFVV.APLZL
INNER JOIN AUFK ON AFKO.AUFNR = AUFK.AUFNR
WHERE AUFK.WERKS = 1000
AND (crhd.ARBPL LIKE 'BSCREBAR'
OR crhd.ARBPL LIKE 'BSCFISET'
OR crhd.ARBPL LIKE 'BSCWDSP'
OR crhd.ARBPL LIKE 'BSCPRSET'
OR crhd.ARBPL LIKE 'BSCCAST'
OR crhd.ARBPL LIKE 'BSCDEMLD' )
GROUP BY AFKO.PLNBEZ, MAKT.MAKTX, AFKO.AUFNR, AFVC.VORNR, CRTX.KTEXT, AFVV.VGW01, AFVV.VGW02, AFVV.VGW03, AFVV.VGW04, AFVV.VGW05, AFVV.VGW06,
AFVV.ISM01, AFVV.ISM02, AFVV.ISM03, AFVV.ISM04, AFVV.ISM05, AFVV.ISM06, AFRU.ISDD, AFRU.ISDZ, AFRU.IEDD, AFRU.IEDZ, AFVC.RUECK, AFVC.ARBID, AFKO.GSTRI, AFKO.GETRI
;
问题是我的 COUNT(AFRU.RUECK) AS "No. of Confirmations",
returns 值不正确,我认为这与我的一个连接有关,但我不确定。
无论如何,我将 select 语句更改为:
(SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) AS 'No. of Confirmations',
CASE
WHEN (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) = 0 THEN 'Confirmed on mass'
WHEN (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS 'Accuracy'
效果很好,正是我想要的。然而,这并不是 select 处理数据的最有效方式。由于更改,该声明大约需要 10 分钟才能 运行。
所以我尝试将其从上面更改为:
@confs = (SELECT COUNT (*) FROM AFRU WHERE RUECK = AFVC.RUECK),
@confs AS 'No. of Confirmations',
CASE
WHEN (@confs) = 0 THEN 'Confirmed on mass'
WHEN (@confs) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS 'Accuracy'
为了消除额外的 SELECT
s,使用我在主 SELECT
上方声明的变量 - DECLARE @confs int;
.
但是,我遇到了一条错误消息:
Msg 141, Level 15, State 1, Line 3
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
我该如何解决这个问题?甚至有可能解决这个问题吗?
我在 SQL 中看到的每个声明变量的示例都排除了动态 where 子句。我特别需要引用另一个 table (AFRU
) 来获取特定确认号 (RUECK
) 的记录数量 - 它来自不同的 table (AFVC
),作为我的主要 select 声明的一部分。
编辑:
基于上面的 SQL 代码(在我进行任何更改之前),这是我的完整输出示例:
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| Material | Material Number | Order | Operation Number | Operation Text | Estimated Hours 1 | Estimated Hours 2 | Estimated Hours 3 | Estimated Hours 4 | Estimated Hours 5 | Estimated Hours 6 | Actual Hours 1 | Actual Hours 2 | Actual Hours 3 | Actual Hours 4 | Actual Hours 5 | Actual Hours 6 | Op Actual Start Date | Op Actual Start Time | Op Actual Finish Date | Op Actual Finish Time | Confirmation Number | OBJID | Order Actual Start Date | Order Confirmed Finish Date | No. of Confirmations | Accuracy |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-385 | Solid plank | 1713023 | 60 | BSC Casting | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200302 | 100959 | 20200302 | 121124 | 7566152 | 10000385 | 20200226 | 20200303 | 3 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-406 | Solid plank | 1713025 | 60 | BSC Casting | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200226 | 210329 | 20200226 | 210329 | 7566124 | 10000385 | 20200226 | 20200227 | 1 | Auto Confirmation |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-414 | Solid plank | 1713026 | 40 | BSC Primary Set | 2.132 | 0 | 0 | 0 | 0 | 0 | 0.19 | 0 | 0 | 0 | 0 | 0 | 20200227 | 142442 | 20200227 | 152927 | 7566106 | 10000383 | 20200227 | 20200303 | 2 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
| 1900A-D14MSB-436 | Solid plank | 1713028 | 60 | BSC Casting | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 0 | 2.132 | 0 | 0 | 0 | 20200224 | 142546 | 20200224 | 154025 | 7556163 | 10000385 | 20200221 | 20200225 | 2 | User clocked on & off |
+------------------+-----------------+---------+------------------+-----------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------------+----------------------+-----------------------+-----------------------+---------------------+----------+-------------------------+-----------------------------+----------------------+-----------------------+
我的 AFRU
table 看起来像这样(用于确认编号 0007566152
):
在我上面的例子中,'number of confirmations'是3
但是table实际上包含6条记录,这意味着3
的值不正确,它实际上应该说 6
.
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| RUECK | ERSDA | ERZET | ERNAM | WERKS | ISDD | ISDZ | IEDD | IEDZ | AUERU | AUFPL | APLZL | AUFNR | VORNR | fwk_LineageID | fwk_VersionID | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 121124 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 121124 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 102224 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 102224 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 124517 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 124517 | X | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
| 7566152 | 20200302 | 102224 | DHAWLEY | 1000 | 20200302 | 100959 | 20200302 | 102224 | | 717464 | 19 | 1713023 | 60 | 2873485 | 4 | | | | | | | | | | | |
+---------+----------+--------+---------+-------+----------+--------+----------+--------+-------+--------+-------+---------+-------+---------------+---------------+--+--+--+--+--+--+--+--+--+--+--+
在我的最高结果中,我希望看到该特定记录的值为 6,而不是 3。
您可以使用 outer apply
而不是 left join
。你也不需要 group by
SELECT
....,
AFKO.GSTRI AS 'Order Actual Start Date',
AFKO.GETRI AS 'Order Confirmed Finish Date',
T.[No. of Confirmations],
T.Accuracy
FROM AFKO
INNER JOIN afvc ON afvc.AUFPL = AFKO.AUFPL
INNER JOIN MAKT ON AFKO.PLNBEZ = MAKT.MATNR
INNER JOIN CRHD ON crhd.OBJID = afvc.ARBID
INNER JOIN CRTX ON AFVC.ARBID = CRTX.OBJID
INNER JOIN AFVV ON AFVC.AUFPL = AFVV.AUFPL
AND AFVC.APLZL = AFVV.APLZL
INNER JOIN AUFK ON AFKO.AUFNR = AUFK.AUFNR
OUTER APPLY ( SELECT
COUNT(A.RUECK) AS "No. of Confirmations",
CASE
WHEN COUNT(A.RUECK) = 0 THEN 'Confirmed on mass'
WHEN COUNT(A.RUECK) = 1 THEN 'Auto Confirmation'
ELSE 'User clocked on & off'
END AS Accuracy
FROM AFRU A WHERE A.RUECK = AFVC.RUECK ) AS T
WHERE AUFK.WERKS = 1000
AND (crhd.ARBPL LIKE 'BSCREBAR'
OR crhd.ARBPL LIKE 'BSCFISET'
OR crhd.ARBPL LIKE 'BSCWDSP'
OR crhd.ARBPL LIKE 'BSCPRSET'
OR crhd.ARBPL LIKE 'BSCCAST'
OR crhd.ARBPL LIKE 'BSCDEMLD' )