2017-02-14 4 views
1

내가 원하는 것은 5-18 세 사이의 어린이 수와 각 가족 수를 보여주는 뷰입니다. SQL Server를 사용하고 있습니다. 보기에서 계산 된 열에 대해 COUNT() 수행

나는 가족 구성원 시대를 얻기 위해 쓴보기

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를 계산 한 위치에서보기를 사용하지 않았다는 것을 알았지 만 그 오류를 보았지만이 부분에서 벗어나지 못했습니다. 케이스. 이상적으로는 내가 회원의 정확한 수를 얻을 수 있다면 바로 바로 볼 수있는 나이 계산을 사용하여 카운트를 얻고 싶었다

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 

다시 한번 세를 다시 계산하는 대신 VIEW에서 수행 될 수를 싶습니다 가족이되면 특정 나이의 구성원을 얻는 것에 착수 할 수 있습니다. 내가 돌아 오는 결과는 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/

감사합니다!

EDIT * *

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 

이 상기 해결책이다.

+0

SQL Server를 사용하고 있습니까? –

+0

예 죄송합니다. 질문에 넣어야합니다. – user3119737

답변

0

조건부 계산 방법입니다. 다음과 같음 :

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 
+0

OR과 AND의 큰 차이점은 다음과 같습니다. 이것은 내가 입력하거나 OR이라는 의미의 직업입니다. – user3119737