我想知道我能用什么来做:
如果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')
答案 0 :(得分:1)
试试这个: -
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');
答案 1 :(得分:1)
检查一下:
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')
答案 2 :(得分:0)
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之后立即使用CASE,或者用END结束语句并用CASE开始第二个条件或用WHEN写一个条件。在你的情况下,后者是相关的。我希望你明白!
答案 3 :(得分:0)
为什么你需要一个案子?
您没有执行两种情况,您的userID表中每条记录最后有两个applianceID' select中的case语句不限制返回的数据,它只是控制所显示记录的可见内容。
您获取多条记录的原因是您的表中有多条记录。事实证明,当前结果中的单个userID有多条记录。一个用于'总计'一个用于' AlwaysOn'有多个日期。因为' Total'不在你的第一个清单中," SELECT"价值被设置为' Relevance'在第二条记录上。
由于您的Ri.userID表格中列出了有问题的ID,其中包含不同的设备ID和其他值以及其他值,并且根据您的输出我认为您只是想......
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')
我不同意命名专栏"选择"因为这是一个关键/保留字。
我根本不知道为什么你需要一个案例陈述...因为错误或者相关性'不在您想要的输出中。
如果字段可以为空,则和not in
是危险的。空值的not in
将返回记录,因为当系统将null与(列表)进行比较时,列表中的null isn不会返回它。无法使用= not in,not exists进行比较。只有a不为null或为null。