繁体   English   中英

SAP HANA中的语句时的情况

[英]case when statements in sap hana

我想知道我可以用来做什么:

如果condition1为true,则仅显示条件1的值,否则转到条件2并仅显示条件2的值。

我尝试使用case的情况,但是这似乎正在执行两个WHEN语句(这是因为这两种情况都存在于表中,但是如果两个都是真的,我只希望第一个何时返回)。 有没有办法做到这一点?

SELECT 
RI.*,
CASE 
WHEN
  ("applianceId" 
   in 
   ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
   and "type" in ('peer')) 
THEN 'Measured' 
ELSE 
   ("applianceId" 
   NOT in 
   ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 
   and "type" IN('peer')) 
THEN 'RELEVANCE' 
ELSE 'ERROR'
END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI
where RI."userId" in 
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6')
and "type" in ('peer')

我得到的当前输出

期望的输出

尝试这个:-

SELECT RI.*, 
  CASE WHEN ("applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" in ('peer')) THEN 'Measured' 
  WHEN ("applianceId" NOT in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" IN('peer')) THEN 'RELEVANCE' 
  ELSE 'ERROR' END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI 
  where RI."userId" in ('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6') and "type" in ('peer');

检查一下:

SELECT
RI.*,
CASE
WHEN
  ("applianceId"
   in
   ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water')
   and "type" in ('peer'))
THEN 'Measured'
WHEN 
   ("applianceId"
   NOT in
   ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water')
   and "type" IN('peer'))
THEN 'RELEVANCE'
ELSE 'ERROR'
END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI
where RI."userId" in
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6')
and "type" in ('peer')
    SELECT 
    RI.*,
    CASE WHEN ("applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" in ('peer')) 
    THEN 'Measured' 
    WHEN ("applianceId" NOT in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') and "type" IN('peer')) 
    THEN 'RELEVANCE' 
    ELSE 'ERROR'
    END AS "Select" FROM "SP_CUSTOMER"."RU_INSIGHT" RI
    where RI."userId" in 
    ('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6')
    and "type" in ('peer')

我的帖子和其他帖子一样,您没有观察到CASE,第二种情况是ELSE之后的CASE是错误的。 您不应该在ELSE之后立即以END结束语句并以CASE开始第二个条件或以WHEN编写条件后立即使用CASE。 在您的情况下,后者是相关的。 我希望你明白!

为什么根本需要案件?

您没有执行两种情况,您的userID表中的每个记录至少有两个ApplianceID。 select中的case语句不限制返回的数据,它仅控制显示的记录可见的内容。

获得多个记录的原因是因为表中有多个记录。 您在当前结果中有一个用户ID的多个记录这一事实证明了这一点。 一个用于“总计”,一个用于“ AlwaysOn”并带有多个日期。 由于“总计”不在您的第一个列表中,因此“第二个记录”中的“选择”值将被设置为“相关性”。

由于您的Ri.userID表中的问题ID多次列出,具有不同的ApplianceID和其他值,并且根据您的输出,我想您只是想要...

SELECT RI.*, 'Measured' AS "Select" 
FROM "SP_CUSTOMER"."RU_INSIGHT" RI
WHERE  RI."userId" in 
('2270BAF2D64948A7031F620645577C82B7529BB26DA46453B4595F0BE61460D6')
  and "type" in ('peer')
  and "applianceId" in ('AlwaysOn','Heating','Cooling','Pool Pump','Hot Water') 

我不同意为“选择”列命名,因为这是一个关键字/保留字。

我根本看不出为什么根本需要一个case语句...因为错误或“相关性”不在您期望的输出中。

如果字段可以为空, not in是很危险的。 not in for null值将返回记录,因为当系统将null与(列表)进行比较时,null不在列表中,因此它将被返回。 Null不能使用= not in,不存在进行比较。 仅a不为null或为null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM