2014-01-23 2 views
0

12 월에 완료된 총 방문수를 얻기 위해 다음과 같은 SQL 쿼리를 설계했습니다.이 SQL 쿼리는 어떻게 더 간단하게 만들 수 있습니까?

select q.MonthName, count(q.MonthName) as TotalVisit from 
(
SELECT DATENAME(MONTH,v.VisitDate) as MonthName  
FROM Visits v 
INNER JOIN Assignments a ON a.AssignmentID = v.AssignmentID 
WHERE a.ClientID IN (33,67) 
AND v.VisitDate BETWEEN '01/12/2013' AND '31/12/2013' 
)q 
group by q.MonthName 

결과 :

MonthName TotalVisit 

December 164 

내가 2008 SQL 베르에서 내부 쿼리를 사용하지 않고 단일 쿼리를 작성하여 동일한 결과를 얻을 수 있습니까?

+0

질문에 대한 의견을 말하십시오. 더 심각하게 받아 들여지면 처음부터 이렇게하면 더 많은 사람들이 도움이 될 것입니다. http://stackoverflow.com/editing-help#comment-formatting – TTeeple

답변

0

외부 쿼리가 필요없는 것처럼 보입니다. 이 같은 결과를 제공한다 : 당신의 "카운트()"기능은 정말 그냥 기록을 계산하기 때문에

SELECT DATENAME(MONTH,v.VisitDate) as MonthName, count(*) as TotalVisit 
FROM Visits v 
INNER JOIN Assignments a ON a.AssignmentID = v.AssignmentID 
WHERE a.ClientID IN (33,67) 
AND v.VisitDate BETWEEN '01/12/2013' AND '31/12/2013' 
group by DATENAME(MONTH,v.VisitDate) 

의미가 있습니다. 카운트 (*)와 카운트 (MonthName)에는 차이가 없습니다.

0
SELECT DATENAME(MONTH,v.VisitDate) as MonthName, 
    COUNT(*) AS TotalVisit 
FROM Visits v 
INNER JOIN Assignments a ON a.AssignmentID = v.AssignmentID 
WHERE a.ClientID IN (33,67) 
    AND v.VisitDate BETWEEN '01/12/2013' AND '31/12/2013' 
GROUP BY DATENAME(MONTH,v.VisitDate) 
+0

SQL이 작동하지 않습니다. COUNT (q.MonthName)는 더 이상 내부 쿼리의 컨텍스트 외부에 존재하지 않습니다. – 64BitBob

+0

빌어 먹을 복사/붙여 넣기 ... 감사합니다. –

0

기본적으로 내부 쿼리에서 수행했습니다. 몇 가지 변경 사항 :

SELECT DATENAME(MONTH,v.VisitDate) as MonthName 
,COUNT(v.ID) AS Visits 
FROM Visits v 
INNER JOIN Assignments a ON a.AssignmentID = v.AssignmentID 
WHERE a.ClientID IN (33,67) 
AND (v.VisitDate >= '01/12/2013' AND v.VisitDate <= '31/12/2013') --changed this for performance 
GROUP BY DATENAME(MONTH,v.VisitDate) 
+1

"성능 향상"은 아무 효과가 없습니다. BETWEEN 문이 사용 사례에 대해 논리적으로 정확하면 "<=" and "> ="비교를 사용하는 것과 동일한 쿼리 계획이 생성됩니다. 출처 : http://www.sql-server-performance.com/forum/threads/which-is-faster-between-or-and.12165/ – 64BitBob

+0

@ 64BitBob 나는 어떤 점에서 BETWEEN이 읽지 않는다고 생각했다. 인덱스를 올바르게 사용하지 마십시오. 코딩의 긴 밤을 보낸 후 야생의 꿈 이었을지도 모릅니다. 팁 고마워! – TTeeple

관련 문제