【发布时间】:2017-07-03 06:44:04
【问题描述】:
所以我想要做的只是有一个视图,显示每个家庭中有多少 5 到 18 岁之间的孩子。我正在使用 SQL 服务器。
我为获取家庭成员年龄而写的视图是
CREATE VIEW VActiveMembers
AS
SELECT
TM.intMemberID AS intMemberID,
TM.strFirstName AS strFirstName,
TM.strLastName AS strLastName,
TM.strEmailAddress AS strEmailAddress,
TM.dtmDateOfBirth AS dtmDateOfBirth,
FLOOR(DATEDIFF(DAY, dtmDateOfBirth, GETDATE()) / 365.25) AS intMemberAge
FROM
TMembers AS TM
WHERE
TM.intStatusFlagID = 1
intStatusFlag = 1 只是一个标志,表示该成员处于活动状态。
现在我已经尝试了大约 3 个小时来解决这个问题,但我无法弄清楚。这是一个我没有试图一口气获得解决方案的地方,而是尝试逐步解决问题,但是我仍然没有得到我想要的结果。
如您所见,我没有使用计算 AGE 的视图,因为“无法绑定多部分标识符”我已经看到该错误,但在这种情况下我无法让它消失.理想情况下,我希望在 VIEW 上执行计数,而不是重新计算年龄
CREATE VIEW VActiveFamilyMembersK12Count
AS
SELECT
TF.intParishFamilyID,
COUNT(DATEDIFF(DAY, dtmDateOfBirth, GETDATE()) / 365) AS intMemberAgeCount
FROM
TFamilies AS TF
INNER JOIN
TFamilyMembers AS TFM
INNER JOIN
VActiveMembers AS vAM ON (TFM.intMemberID = vAM.intMemberID)
ON (TFM.intParishFamilyID = TF.intParishFamilyID)
WHERE
TF.intStatusFlagID = 1
GROUP BY
TF.intParishFamilyID
我只想使用年龄计算来获得计数,以查看如果我能够获得家庭中正确的成员人数,那么我可以开始在此基础上获得特定年龄的成员人数。我得到的结果是 2,但每个家庭保证有 3 个成员。
我要找的结果是这样的
Family_ID | K12Count
-----------------------------
1001 | 2
1002 | 0
1003 | 1
1004 | 0
这是我查找的资源列表,试图弄清楚这一点,也许其中一个实际上是答案,我只是没有看到它,但我现在不知所措。
SQL Select Count from below a certain age
How to get count of people based on age groups using SQL query in Oracle database?
Count number of user in a certain age's range base on date of birth
http://timmurphy.org/2010/10/10/conditional-count-in-sql/
提前致谢!
* 编辑 *
CREATE VIEW VActiveFamilyMembersK12Count
AS
SELECT
TF.intParishFamilyID,
SUM(CASE WHEN intMemberAge >= 5 AND intMemberAge <= 18 THEN 1 ELSE 0 END) AS intK12Count
FROM
TFamilies AS TF
INNER JOIN TFamilyMembers AS TFM
INNER JOIN VActiveMembers AS vAM
ON (TFM.intMemberID = vAM.intMemberID)
ON (TFM.intParishFamilyID = TF.intParishFamilyID)
WHERE
TF. intStatusFlagID = 1
GROUP BY
TF.intParishFamilyID
GO
这是上面的解决方案。
【问题讨论】:
标签: sql-server tsql count views calculated-columns