sql - COALESCE 内的 CASE

标签 sql amazon-redshift coalesce

我有两个带有时间戳值的 Redshift 表。其中一个具有本地值,但有一些空值,另一个具有 GMT,但没有空值。表 2 中还有一个国家/地区列。 我想查询本地时间值,并根据空值所在的国家/地区将 COALESCE 与 CASE 结合使用。 我尝试过

 CASE 
        WHEN (T1.local_time = '' OR T1.local_time=NULL) AND T2.country = 'UK'  THEN T2.gmt_time
        WHEN (T1.local_time = '' OR T1.local_time=NULL) AND T2.country = 'ES' DATEADD(hour, 1, T2.gmt_time)
        ...
 ELSE T2.gmt_time END AS final_time

但它没有捕获空值。 COALESCE (NVL) 允许我捕获 NULL 值,但我不确定将案例放置在哪里。我尝试过:

COALESCE (T1.local_time, 
          CASE
            WHEN T2.country = 'UK' THEN DA
            WHEN T2.COUNTRY = 'SP' THEN DATEADD(hour, 1, T2.gmt_time)
            ...
          ELSE T2.gmt_time END AS local_time) 
AS time_final)

但是我收到错误。查询非常大,因此我想避免使用临时表。有什么解决办法吗? 提前致谢

最佳答案

对于遇到此问题的任何人,要在 COALESCE 语句中正确编写 CASE 语句,应按如下方式修改代码:

COALESCE (T1.local_time, 
          CASE
            WHEN T2.country = 'UK' THEN DA
            WHEN T2.COUNTRY = 'SP' THEN DATEADD(hour, 1, T2.gmt_time)
            ...
          ELSE T2.gmt_time END) AS time_final

关于sql - COALESCE 内的 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332965/

相关文章:

SQL,因帕拉 : why can't I do two counts on one query

android - SQLite删除语法错误

mysql - SQL - JOIN 更多表而不是 IN(子查询)

内部连接查询中的 MySQL COALESCE?

sql - 我可以采用 COALESCE 数据集的 DISTINCT 集吗?

mysql - MongoDB 相当于 SQL "NOT LIKE"查询

java - 当用户密码中包含 # 字符时,Redshift JDBC 连接身份验证失败

mysql - AWS Kinesis Firehose 未在 Redshift 中插入数据

amazon-redshift - Redshift 中的 ROW_NUMBER() 从每组中选择最大的行?

postgresql - 如何确保存储函数始终返回 TRUE 或 FALSE?