根据字段值删除Hana Table上的值

时间:2018-07-19 00:48:26

标签: sql database procedure hana

我正在处理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

2 个答案:

答案 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'