【发布时间】:2018-03-29 07:17:21
【问题描述】:
我正在尝试编写一个查询,根据年龄、性别和状况(糖尿病、高血压等)为我提供患者就诊次数。获取糖尿病患者的就诊次数,按性别分组,以及年龄在 45-54 岁之间的患者。我使用 Inner Join 仅获取两个表中都存在的行。我得到了错误:
age.Age 在选择列表中无效,因为它不包含在 聚合函数或 GROUP BY 子句。
你认为我应该使用 age.age 分区吗?
TABLE_A
+------------+------------+------------+
| Member_Key | VisitCount | date |
+------------+------------+------------+
| 4000 | 1 | 2014-05-07 |
| 4000 | 1 | 2014-05-09 |
| 4001 | 2 | 2014-05-08 |
+------------+------------+------------+
TABLE_B
+------------+--------------+
| Member_Key | Condition |
+------------+--------------+
| 4000 | Diabetes |
| 4000 | Diabetes |
| 4001 | Hypertension |
+------------+--------------+
TABLE_C
+------------+---------------+------------+
| Member_Key | Member_Gender | Member_DOB |
+------------+---------------+------------+
| 4000 | M | 1970-05-21 |
| 4001 | F | 1968-02-19 |
+------------+---------------+------------+
查询
SELECT c.conditions,
age.gender,
CASE
WHEN age.age BETWEEN 45 AND 54
THEN SUM(act.visitcount)
END AS age_45_54_years
FROM table_a act
INNER JOIN
(
SELECT DISTINCT
member_key,
conditions
FROM table_b
) c ON c.member_key = act.member_key
INNER JOIN
(
SELECT DISTINCT
member_key,
member_gender,
DATEPART(year, '2017-10-16')-DATEPART(year, member_dob) AS Age
FROM [table_c]
) AS age ON age.member_key = c.member_key
GROUP BY c.conditions,
age.member_gender;
预期输出
+--------------+--------+-------------+
| Condition | Gender | TotalVisits |
+--------------+--------+-------------+
| Diabetes | M | 2 |
| Hypertension | F | 2 |
+--------------+--------+-------------+
【问题讨论】:
-
向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask
-
您知道您的年龄计算不准确吗?如果该人今年的生日已经过,则此方法有效。
-
高血压也有 2 次就诊吗?
-
visitflag不存在,你的意思是VisitCount? -
@SeanLange 是对的。搜索此站点结果后,年龄计算并不那么简单。但这里有一个answer 有非常详细的解决方案。
标签: sql sql-server join group-by inner-join