2013-12-09 3 views
1

필자가 작성한 쿼리가 각 조직이 아닌 페이지의 전체보기를 세는 이유는 무엇입니까? 문제는 19 및 8로 나오지만, 쿼리는 나머지 27 개의 페이지 뷰로 나옵니다. 나머지 쿼리는 제대로 작동합니다. 누구 한테 왜 그런 생각이 들었 니? 감사합니다 토마스열을 잘못 계산하는 중 SQL

SELECT orgID, orgName, 
    (SELECT COUNT (rvSessionKey) 
    FROM tblReport 
     LEFT OUTER JOIN tblReportView ON rptID = rv_rptID 
    WHERE rpt_orgID IN (1002,1047) 
      AND rvEmail NOT LIKE '%support%' 
      AND rpt_qtrID IN (1)) AS [Page View], 
    COUNT(DISTINCT rvSessionKey) AS [Views], COUNT(DISTINCT rsShareKey) AS [Users], 
    ISNULL(ROUND(AVG(CAST(pfRating AS FLOAT)), 1), 0) AS [Avg Page Rating] 
FROM tblReport 
    LEFT OUTER JOIN tblReportView ON rptID = rv_rptID 
    INNER JOIN tblReportShare ON rs_rptID = rptID 
    LEFT OUTER JOIN tblPageFeedback ON pfEmail = rsEmail 
    INNER JOIN PMaster.dbo.tblOrganisation ON orgID = rpt_orgID 
WHERE rvEmail NOT LIKE '%support%' 
    AND orgID IN (1002,1047) 
    AND rpt_qtrID IN (1) 
    AND rvPage NOT LIKE 'Arts' 
GROUP BY orgID, orgName 
ORDER BY orgName 

답변

2

당신은 아마 그 하위 쿼리를 할 필요하지 않는 방법을 해결할 수 있지만, 그것은 당신이 당신의 [페이지보기] 하위 쿼리의 orgID과의 하나 사이의 상관 관계를 추가 할 필요가 작동하도록 주요 쿼리. 당신이 모든 열 이름을 별칭을하지 않기 때문에 당신에게 완전한 예제를 제공하기 조금 어렵다하지만, [페이지보기] 하위 쿼리에 이런 일이 그것이 작동되도록해야합니다

SELECT COUNT (rvSessionKey) 
FROM tblReport tt 
LEFT OUTER JOIN tblReportView ON rptID = rv_rptID 
WHERE rpt_orgID IN (1002,1047) 
    AND tt.rpt_orgID = tblReport.orgID --Correlation to the outside query 
    AND rvEmail NOT LIKE '%support%' 
    AND rpt_qtrID IN (1)) AS [Page View], 
1

는 모두 하위 쿼리를 제거 . COUNT(rvSessionKey)은 그룹화 된 조직에 대해 선택한 집합의 항목 수를 제공합니다. 내 생각이 당신의 페이지 수를 제공하고 COUNT(DISTINCT rvSessionKey) 당신에게 세션 수 있습니다 :

SELECT orgID, orgName, 
    COUNT (rvSessionKey) AS [Page View], 
    COUNT(DISTINCT rvSessionKey) AS [Views], 
    COUNT(DISTINCT rsShareKey) AS [Users], 
    ISNULL(ROUND(AVG(CAST(pfRating AS FLOAT)), 1), 0) AS [Avg Page Rating] 
FROM 
    ....... 
+0

이 내가 먼저했다 무엇을하지만 그래서 내가 훨씬 더 큰 번호를 내 곳 문에 보이지 않는다 76 32 :/ –

+0

@ThomasJames Where 절을 살펴 보겠습니다. 문제는 조인으로 인해 rvSessionKey가있는 행이 카운트에서 중복되는 것입니다. 76과 32가 4 * 19와 4 * 8이라는 것을 알 수 있습니다. 이는 조인이 첫 번째 테이블의 한 행과 두 번째 테이블의 행을 결합하는 것을 의미합니다. 하위 쿼리가 필요할 수도 있습니다. 질문을 편집하여 열 이름을 완전히 한정하여 어떤 열이 어떤 표에서 왔는지 확인할 수 있습니까? 예 : 'SELECT tblReport.OrgID, tblReport.orgName' 등 – Tobsey

관련 문제