选择分组数据中字符串的最小值
Selecting the lowest value of a character string in a grouped data
我正在尝试创建 SAP 查询 (SQ02)。
我的数据集是根据字段值分组的(如下例)。
我需要 select 并输出另一个字段的最小值,但它是一个混合字符 - 字母 + 数字,我需要最小的数字。
我现在有这段代码,但它只取回主账户的附加值,逻辑失败,主账户没有最低值。
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD ).
IF cls2+1(1) > KNVV-KLABC+1(1) AND KNVV-KLABC+0(1) = 'R'.
clear CLS2.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'R%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD ).
ENDIF.
示例数据集:
Customer Class Group
1001 R1 1001
301048 R2 1001
10015 A1 10015
306069 A2 10015
6042482 R1 10025
10027 R1 10027
303226 R2 10027
10028 A4 10028
306070 A4 10028
10034 A2 10034
303724 A5 10034
403558 A7 10034
5042 A1 10047
302673 A3 10047
中间结果对应于 SELECT MIN( class ) AS Class2, group FROM abovetable GROUP BY group
会给出:
Class2 Group
R1 1001
A1 10015
R1 10025
R1 10027
A4 10028
A2 10034
A1 10047
通过合并中间结果,最终结果将如下所示:
Customer Class Group Class2
1001 R1 1001 R1
301048 R2 1001 R1
10015 A1 10015 A1
306069 A2 10015 A1
6042482 R1 10025 R1
10027 R1 10027 R1
303226 R2 10027 R1
10028 A4 10028 A4
306070 A4 10028 A4
10034 A2 10034 A2
303724 A5 10034 A2
403558 A7 10034 A2
5042 A1 10047 A1
302673 A3 10047 A1
只要数量就够了
以下代码将返回组中最低值的条目。
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'R%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
IF CLS2 = ''.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'A%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
IF CLS2 = ''.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
ENDIF.
ENDIF.
作为另一个要求,我还必须确保客户 class 第一个字母与结果字段匹配,我使用此代码创建了一个额外的字段。它将匹配原始 Class 字母和上述代码为组选择的值。
CLEAR CLS1.
IF CLS2 NE ' '
AND KNVV-KLABC+0(1) = 'R' OR KNVV-KLABC+0(1) = 'A'.
CONCATENATE KNVV-KLABC+0(1) CLS2+1(1)
INTO CLS1.
ELSE.
CLS1 = CLS2.
ENDIF.
我正在尝试创建 SAP 查询 (SQ02)。
我的数据集是根据字段值分组的(如下例)。 我需要 select 并输出另一个字段的最小值,但它是一个混合字符 - 字母 + 数字,我需要最小的数字。
我现在有这段代码,但它只取回主账户的附加值,逻辑失败,主账户没有最低值。
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD ).
IF cls2+1(1) > KNVV-KLABC+1(1) AND KNVV-KLABC+0(1) = 'R'.
clear CLS2.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'R%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD ).
ENDIF.
示例数据集:
Customer Class Group
1001 R1 1001
301048 R2 1001
10015 A1 10015
306069 A2 10015
6042482 R1 10025
10027 R1 10027
303226 R2 10027
10028 A4 10028
306070 A4 10028
10034 A2 10034
303724 A5 10034
403558 A7 10034
5042 A1 10047
302673 A3 10047
中间结果对应于 SELECT MIN( class ) AS Class2, group FROM abovetable GROUP BY group
会给出:
Class2 Group
R1 1001
A1 10015
R1 10025
R1 10027
A4 10028
A2 10034
A1 10047
通过合并中间结果,最终结果将如下所示:
Customer Class Group Class2
1001 R1 1001 R1
301048 R2 1001 R1
10015 A1 10015 A1
306069 A2 10015 A1
6042482 R1 10025 R1
10027 R1 10027 R1
303226 R2 10027 R1
10028 A4 10028 A4
306070 A4 10028 A4
10034 A2 10034 A2
303724 A5 10034 A2
403558 A7 10034 A2
5042 A1 10047 A1
302673 A3 10047 A1
只要数量就够了
以下代码将返回组中最低值的条目。
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'R%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
IF CLS2 = ''.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KLABC LIKE 'A%'
AND KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
IF CLS2 = ''.
Select MIN( KLABC )
FROM KNVV
INTO CLS2
WHERE KUNNR IN
( SELECT KUNNR
FROM KNB1
WHERE EKVBD = KNB1-EKVBD
AND KUNNR IN
( SELECT KUNNR
FROM KNA1
WHERE LOEVM NE 'X' ) ).
ENDIF.
ENDIF.
作为另一个要求,我还必须确保客户 class 第一个字母与结果字段匹配,我使用此代码创建了一个额外的字段。它将匹配原始 Class 字母和上述代码为组选择的值。
CLEAR CLS1.
IF CLS2 NE ' '
AND KNVV-KLABC+0(1) = 'R' OR KNVV-KLABC+0(1) = 'A'.
CONCATENATE KNVV-KLABC+0(1) CLS2+1(1)
INTO CLS1.
ELSE.
CLS1 = CLS2.
ENDIF.