WITH AS 使用 UNION 和 GROUP BY

WITH AS using UNION and GROUP BY

我继承了一些复杂的 SQL 服务器代码,我正尝试将其用于新数据。我想知道是否有人在 2017 年住院、开过处方或接种过疫苗;基于他们的 unique_id。我正在查看各种表格以查找他们的卫生系统联系人,提取 2017 年的相关事件,然后添加来自 table.demstable.geo 的人口统计信息。

我想要每个 unique_id 一行,显示 1 如果他们与医院有联系,或者有处方或免疫接种;然后是他们的人口统计信息。

摘要代码为:

WITH CORE_POP_17 AS
( SELECT unique_id,
         year_num,
         MAX(aaa) as aaa,
         MAX(ccc) as ccc,
         MAX(bbb) as bbb
FROM (
      SELECT unique_id,
             year(event_date) as year_num,
             1 as aaa, 
             0 as ccc, 
             0 as bbb
      FROM table.hosps
      WHERE year_num IN (2017)

      
      UNION

       SELECT unique_id,
             year(event_date) as year_num,
             0 as aaa, 
             1 as ccc, 
             0 as bbb
      FROM table.pharms
      WHERE year_num IN (2017)
      
      UNION

       SELECT unique_id,
             year(event_date) as year_num,
             0 as aaa, 
             0 as ccc, 
             1 as bbb
      FROM table.imms
      WHERE year_num IN (2017)

     )
GROUP BY unique_id
)
SELECT
unique_id, 
aaa,
bbb,
ccc,
dems.rrr,
geo.ppp

FROM CORE_POP_17 CORE_POP
LEFT JOIN table.dems dems
ON dems.unique_id = CORE_POP.unique_id
LEFT JOIN table.geo geo
on geo.unique_ID = CORE_POP.unique_id

GROUP BY 命令抛出错误

"Incorrect syntax near the keyword GROUP"

非常感谢任何帮助让它工作的帮助。谢谢。

它缺少括号中嵌套内部联合查询的别名。紧跟 GROUP BY 上方括号后的单个字符(任何字母)这样简单的东西将解决这个问题。

完成后,您还会发现 year_numSELECT 列表中无效,因为它不是 GROUP BY 或聚合函数的一部分。由于年份始终为 2017,您可以将其替换为字符串文字或将 yearnum 添加到 GROUP BY 列表。

这就是我想要的。我没有注意查询的逻辑是否有意义...只关注明显的语法内容。