【问题标题】:Performing COUNT() on a computed Column from a VIEW对来自 VIEW 的计算列执行 COUNT()
【发布时间】: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

Conditional Count on a field

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


    【解决方案1】:

    条件计数是要走的路。 比如:

    SELECT intParishFamilyID, 
    COUNT(CASE WHEN intMemberAge >=5 and intMemberAge <=18 THEN 1 ELSE 0 END)
    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
    

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多