SQL脚本:如果其他列中存在值,则为新列1,否则为0

问题描述 投票:0回答:2

我在SAP HANA DB中有第一个表T1,如下所示:

T1
----------------------------
| key | value | date       |
----------------------------
| 1   |  A    | 01-02-2018 |
| 2   |  B    | 01-03-2017 |
| 3   |  C    | 01-02-2017 |
| 4   |  D    | 01-02-2018 |
----------------------------

而另一个表T2:

T2
---------------------
| value | date       |
----------------------
|  B    | 01-02-2017 |
|  B    | 01-05-2017 |
|  D    | 01-02-2019 |
----------------------

如果T1T1.value中存在T2.value这个值,我需要添加T2.date < T1.date新列作为指标,值为'1',否则为'0'。我只能使用select查询或SQL脚本,没有insert或update语句。

预期结果:

----------------------------------------
| key | value | date        | indicator |
----------------------------------------
| 1   |  A    | 01-02-2018  | 0         |
| 2   |  B    | 01-03-2017  | 1         |
| 3   |  C    | 01-02-2017  | 0         |
| 4   |  D    | 01-02-2018  | 0         |
-----------------------------------------

请帮助查看HANA SQL上的查询或脚本。

sql sap hana
2个回答
3
投票

如果T2.value中存在T1.value而该值存在T2.date <T1.date,则需要将T1新列添加为值为“1”的指示符,否则为“0”。

EXISTS解决了这个问题:

select 
  t1.*,
  case 
    when exists (
      select 1 from t2 
      where value = t1.value and date < t1.date
    ) then '1'
    else '0'
  end indicator
from t1

1
投票

你可以使用correlated subquery

select T1.*, 
       ( select sign(count(1)) from T2 where T2.date < T1.date and T2.value = T1.value )
       as indicator
  from T1;

sign()函数返回1,前提是满足条件的行至少有一行

Demo

© www.soinside.com 2019 - 2024. All rights reserved.