我正在处理hana表,并且如果表包含列表中的值,则尝试删除该表。
A B
22 01
22 01
22 02
22 06
23 01
23 01
23 06
我想从此表中删除一些值并拥有它。
A B
22 01
22 01
22 06
23 01
23 01
23 06
基本上,我希望进行计数,然后检查B列是否包含01 AND 02,是否确实删除了02,以及是否仅包含01休假。
对于几乎所有我尝试过的SQL脚本,这似乎都是不可能的
SELECT BP, COUNT(*) AS SO FROM "EH"."BP_CUST" GROUP BY BP;
此脚本获取每一行的计数并将其放在SO列中。
之后,也许在SO列上执行if语句,然后删除B字段包含01和02的内容吗?
我尝试执行IF语句,然后选择,但我也无法使其正常工作。
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
答案 0 :(得分:1)
如果我理解正确,那么您想要:
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'
);
您的问题说“删除”。但是我认为,目的是仅在同一a
(以及所有其他行)没有“ 01”行的情况下选择“ 02”行。
答案 1 :(得分:0)
如果我理解正确,这可能是解决方案:
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'