【问题标题】:Case statement - cannot nest aggregate operationsCase 语句 - 不能嵌套聚合操作
【发布时间】:2019-03-13 19:31:16
【问题描述】:

我收到一个错误 -

尝试在 Teradata 中运行以下查询部分时,无法嵌套聚合操作。

当 SeqCount = 2 且手术数据与第一次手术相同时,我希望第二次手术日期 (SecondSurgery) 为空,否则返回第二次手术数据。

任何帮助将不胜感激。

SELECT
    pat_id,
    PatientMRN,
    PatientName,
    AdmitDate,
    DischargeDate,
    MIN(case when SeqCount=1 then ORProcName else null end) as FirstProcedure,
    MIN(case when SeqCount=1 then SurgeryDate else null end) as FirstSurgery,
    MIN(case when SeqCount=2 then ORProcName else null end) as SecondProcedure,
    MIN(case when SeqCount=2 and SurgeryDate = FirstSurgery then NULL  else SurgeryDate end) as SecondSurgery

【问题讨论】:

  • 您在没有GROUP BY 的情况下使用MIN,并且在选择其他非聚合列时没有意义。请提供示例数据和预期输出。
  • 您可能需要qualify row_number() over (partition by pat_id order by SurgeryDate) = 1lead(或minover 的组合替换聚合
  • 请提供完整的查询,以便更好地了解您的问题。
  • 您的查询没有嵌套聚合函数并且不完整。显示(可能是简化形式)说明问题的查询。
  • SecondSurgery 的 CASE 语句引用 FirstSurgery 这是一个聚合。这可能是你要横着走的地方吗?

标签: sql teradata


【解决方案1】:

正如 ErrorMsg 所说,由于基于 SET 的处理(一次性),这是不可能的。 - 您可以强制使用子查询进行顺序处理,并在外部 SQL 中计算 SecondSurgery。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2020-05-15
    • 1970-01-01
    • 2011-03-12
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多