1
我想编写一个查询这使我的年龄,性别和状况(糖尿病,高血压等)患者就诊的号取出使用组记录。根据性别和年龄在45-54岁之间的患者计算糖尿病患者和患者的访视次数。我使用Inner Join来仅获取两个表中存在的行。我得到的错误:SQL用3个条件
age.Age is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
你认为我应该使用age.age分区?
TABLE_A
+------------+------------+------------+
| Member_Key | VisitCount | date |
+------------+------------+------------+
| 4000 | 1 | 2014-05-07 |
| 4000 | 1 | 2014-05-09 |
| 4001 | 2 | 2014-05-08 |
+------------+------------+------------+
表-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 |
+--------------+--------+-------------+
显示我们的DB模式,样本数据,当前和预期的输出。 \t请仔细阅读[**如何对向**](http://stackoverflow.com/help/how-to-ask) –
你一定要明白,你的年龄计算不准确?如果这个人的生日已经在今年发生过,那么它就行得通 –
高血压不是也有2次访问? –