【问题标题】:How to use case properly in SQL如何在 SQL 中正确使用大小写
【发布时间】:2020-01-27 18:45:34
【问题描述】:

以下 SQL 代码出现小错误,我不明白其原因。

我正在使用 AWS Athena。

SELECT 
    icustay_id, 
    itemid, 
    date_diff('second', TIMESTAMP '1970-01-01 00:00:00', starttime) AS starttime, 
    date_diff('second', TIMESTAMP '1970-01-01 00:00:00', endtime) AS endtime,
    CASE WHEN itemid IN (30120,221906,30047) AND rateuom='mcg/kg/min' THEN CAST(rate AS DECIMAL(10,3))
FROM mimiciii.inputevents_mv
WHERE itemid IN (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307) 
ORDER BY icustay_id, itemid, starttime

以下是错误。

调用时发生错误(InvalidRequestException) StartQueryExecution 操作:第 2:1 行:无关输入 'case' 期待 {, ',', 'FROM', 'WHERE', 'GROUP', 'ORDER', 'HAVING', 'LIMIT'、'UNION'、'EXCEPT'、'INTERSECT'} 无法回滚

【问题讨论】:

  • 您能否发布完整的select 声明,包括FROM 子句?
  • 您的CASE 表达式中缺少END(可能还有ELSE ...

标签: sql amazon-web-services amazon-athena


【解决方案1】:

Case expression 的语法是:

CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END

您的选择语句中缺少END。只需在您的 then 条件后添加 END 关键字,如下面的查询所示。它应该可以正常工作。

query_vaso_mv = """
select icustay_id, itemid, date_diff('second', timestamp '1970-01-01 00:00:00', starttime) as starttime, date_diff('second', timestamp '1970-01-01 00:00:00', endtime) as endtime,
case when itemid in (30120,221906,30047) and rateuom='mcg/kg/min' then cast(rate as DECIMAL(10,3)) end 
from mimiciii.inputevents_mv
where itemid in (30128,30120,30051,221749,221906,30119,30047,30127,221289,222315,221662,30043,30307) 
order by icustay_id, itemid, starttime
"""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2018-12-18
    • 2010-09-18
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多