是否有where条件来比较拆分后的字符串值?

Is there a where condition to compare the value of the string after splitting?

数据库:SAP HANA

首先table为原始数据

原创

MATNR EAU QTY
1 30 1
1 30 50
2 70 1
2 70 50
2 70 100
3 10 1

group by后输出第二个table

输出(按 MATNR 分组)

MATNR EAU QTY
1 30 1, 50
2 70 1, 50, 100
3 10 1

第三个table是预期的结果

产量(其中 EAU > 第二个数量)

MATNR EAU QTY
2 70 1, 50, 100

有没有像WHERE SPLIT(QTY, ', ')[1] > EAU这样的sql?

您没有指定您使用的是什么数据库,但一种方法是使用 row_number():

select matnr, eau,
       listagg(qty, ', ') within group (order by qty)
from (select t.*,
             row_number() over (partition by matnr order by qty) as seqnum
      from t
     ) t
group by matnr, eau
having eau > sum(case when seqnum = 2 then qty end) ;

注意:这使用通用 SQL。确切的语法(特别是字符串聚合)取决于您使用的数据库。

有多种方法可以做到这一点。

  • 在支持数组的DBMS中,可以在HAVING子句中使用ARRAY_AGG取出
SELECT
  t.MATNR,
  t.EAU,
  STRING_AGG(t.QTY, ',')
FROM YourTable t
GROUP BY
  t.MATNR,
  t.EAU
HAVING t.EAU > ARRAY_AGG(t.QTY ORDER BY t.QTY)[2];
  • 您可以使用行编号解决方案
SELECT
  t.MATNR,
  t.EAU,
  STRING_AGG(t.QTY, ',')
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY t.MATNR, t.EAU ORDER BY t.QTY) AS rn
    FROM YourTable t
) t
GROUP BY
  t.MATNR,
  t.EAU
HAVING t.EAU > SUM(CASE WHEN t.rn = 2 THEN t.QTY END);