根据字段值删除 Hana Table 上的值
Deleting values on Hana Table based on a field value
我正在处理 hana table,如果 table 包含列表中的值,我将尝试删除它。
A B
22 01
22 01
22 02
22 06
23 01
23 01
23 06
我想从这个 table 中删除一些值并得到这个。
A B
22 01
22 01
22 06
23 01
23 01
23 06
基本上我很可能会进行计数并检查 B 列是否由 01 和 02 组成,是否确实删除 02 以及是否仅由 01 组成。
对于我尝试过的几乎每个 sql 脚本来说,这似乎几乎是不可能的
SELECT BP, COUNT(*) AS SO FROM "EH"."BP_CUST" GROUP BY BP;
此脚本获取每一行的计数并将其放入 SO 列。
之后可能会在 SO 列上做一个 if 语句,如果 B 字段包含 01 和 02 则删除?
我尝试做 IF 语句然后 select 但我也无法让它工作。
A B
22 01
22 01
22 02
22 06
23 01
23 01
23 06
24 02
Becomes
A B
22 01
22 01
22 06
23 01
23 01
23 06
24 02
如果我没理解错的话,你想要:
select c.*
from "EH"."BP_CUST" c
where c.b <> '02' or
not exists (select 1
from "EH"."BP_CUST" c2
where c2.a = c.a and c2.b = '01'
);
您的问题是"delete"。但我认为只有当没有相同 a
(和所有其他行)的“01”行时,select“02”行才是目的。
如果我理解正确,这可能是解决方案:
DELETE BP_CUST
WHERE A IN
(
SELECT
BP_CUST.A
FROM
(
SELECT
A
, COUNT(CASE WHEN B != '02' THEN 1 ELSE NULL END) AS NOT_02
, COUNT(CASE WHEN B = '02' THEN 1 ELSE NULL END) AS IS_02
FROM BP_CUST
GROUP BY A
) AS t_delete
JOIN BP_CUST ON BP_CUST.A = t_delete.A
WHERE B = '02' AND NOT_02 > 0 AND IS_02 > 0
)
AND B = '02'
我正在处理 hana table,如果 table 包含列表中的值,我将尝试删除它。
A B
22 01
22 01
22 02
22 06
23 01
23 01
23 06
我想从这个 table 中删除一些值并得到这个。
A B
22 01
22 01
22 06
23 01
23 01
23 06
基本上我很可能会进行计数并检查 B 列是否由 01 和 02 组成,是否确实删除 02 以及是否仅由 01 组成。
对于我尝试过的几乎每个 sql 脚本来说,这似乎几乎是不可能的
SELECT BP, COUNT(*) AS SO FROM "EH"."BP_CUST" GROUP BY BP;
此脚本获取每一行的计数并将其放入 SO 列。
之后可能会在 SO 列上做一个 if 语句,如果 B 字段包含 01 和 02 则删除?
我尝试做 IF 语句然后 select 但我也无法让它工作。
A B
22 01
22 01
22 02
22 06
23 01
23 01
23 06
24 02
Becomes
A B
22 01
22 01
22 06
23 01
23 01
23 06
24 02
如果我没理解错的话,你想要:
select c.*
from "EH"."BP_CUST" c
where c.b <> '02' or
not exists (select 1
from "EH"."BP_CUST" c2
where c2.a = c.a and c2.b = '01'
);
您的问题是"delete"。但我认为只有当没有相同 a
(和所有其他行)的“01”行时,select“02”行才是目的。
如果我理解正确,这可能是解决方案:
DELETE BP_CUST
WHERE A IN
(
SELECT
BP_CUST.A
FROM
(
SELECT
A
, COUNT(CASE WHEN B != '02' THEN 1 ELSE NULL END) AS NOT_02
, COUNT(CASE WHEN B = '02' THEN 1 ELSE NULL END) AS IS_02
FROM BP_CUST
GROUP BY A
) AS t_delete
JOIN BP_CUST ON BP_CUST.A = t_delete.A
WHERE B = '02' AND NOT_02 > 0 AND IS_02 > 0
)
AND B = '02'