WITH AS 使用 UNION 和 GROUP BY
WITH AS using UNION and GROUP BY
我继承了一些复杂的 SQL 服务器代码,我正尝试将其用于新数据。我想知道是否有人在 2017 年住院、开过处方或接种过疫苗;基于他们的 unique_id
。我正在查看各种表格以查找他们的卫生系统联系人,提取 2017 年的相关事件,然后添加来自 table.dems
和 table.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_num
在 SELECT
列表中无效,因为它不是 GROUP BY
或聚合函数的一部分。由于年份始终为 2017
,您可以将其替换为字符串文字或将 yearnum
添加到 GROUP BY
列表。
这就是我想要的。我没有注意查询的逻辑是否有意义...只关注明显的语法内容。
我继承了一些复杂的 SQL 服务器代码,我正尝试将其用于新数据。我想知道是否有人在 2017 年住院、开过处方或接种过疫苗;基于他们的 unique_id
。我正在查看各种表格以查找他们的卫生系统联系人,提取 2017 年的相关事件,然后添加来自 table.dems
和 table.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_num
在 SELECT
列表中无效,因为它不是 GROUP BY
或聚合函数的一部分。由于年份始终为 2017
,您可以将其替换为字符串文字或将 yearnum
添加到 GROUP BY
列表。
这就是我想要的。我没有注意查询的逻辑是否有意义...只关注明显的语法内容。