2015-01-18 6 views
0

현재 SQL Server에는 테이블에 일주일에 고유 ID가 포함 된 횟수를 세는 별도의 두 가지 쿼리가 있습니다. 두 가지가 아닌 하나의 쿼리를 사용하여 이러한 내용을 표시하려고합니다.SQL 두 테이블 간의 개수

이 데이터는 두 개의 별도보기로 유지되므로 필자는 두 가지 쿼리를 작성합니다. 이들은 ActivityPointerAsp_dealercallreport입니다.

쿼리 # 1 :

SELECT 
    OwnerIDName, 
    COUNT(Distinct ActivityID) AS CalendarEvents 
FROM 
    ActivityPointer 
WHERE 
    /*Specify Activity code for Calendar Events*/ 
    ActivityTypeCode = '4201' 
    /*Specify Calendar Events from this week only*/ 
    AND ScheduledStart >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
    AND ScheduledStart <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
    /*Specify users to be reported on by Name*/ 
    AND OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY 
    OwnerIDName  

쿼리 # 2 :

SELECT 
    OwnerIDName, 
    COUNT(Distinct Asp_dealercallreportId) AS DealerVisits 
FROM 
    Asp_dealercallreport 
    /*Specify Calendar Events from this week only*/ 
WHERE  
    asp_callreportdate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
    AND asp_callreportdate <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
    /*Specify to be reported on by Name*/ 
    AND OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY 
    OwnerIDName 

감사

+0

, 당신은 두 쿼리를 해결 한 후 하나 개의 행을 포함하는 시스템 테이블의 일부를 사용하거나 임시을 만들고, 수 하위 쿼리로, 동일한 쿼리에서 한 행과 두 개의 필드를 갖게됩니다. – facundofarias

답변

1

아마 당신은 단순히 INNER가 JOIN 연산자를 사용할 수 있습니다 ? 이와 같이 :

SELECT 
    ap.OwnerIDName, 
    COUNT(Distinct ap.ActivityID) AS CalendarEvents, 
    COUNT(Distinct a_dcr.Asp_dealercallreportId) AS DealerVisits 
FROM 
    ActivityPointer ap 
INNER JOIN 
    Asp_dealercallreport a_dcr ON ap.OwnerIDName=a_dcr.OwnerIDName 
WHERE 
/*Specify Activity code for Calendar Events*/ 
    ap.ActivityTypeCode = '4201' 
/*Specify Calendar Events from this week only*/ 
    AND ap.ScheduledStart >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
    AND ap.ScheduledStart <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
/*Specify Calendar Events from this week only*/ 
    AND a_dcr.asp_callreportdate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
    AND a_dcr.asp_callreportdate <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
/*Specify users to be reported on by Name*/ 
    AND ap.OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY 
    ap.OwnerIDName  
+0

Wizardry. 고맙습니다. 내 조인을 닦을 필요가있어. 내가 이것을하고있을 때 이상한 결과가 떠오르고 있었다. – JimmieMaul

1

사용 조건 집합 :

SELECT OwnerIDName, 
     COUNT(Distinct case when ScheduledStart >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) AND 
           ScheduledStart <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
          then ActivityID end) AS CalendarEvents_Scheduled, 
     COUNT(Distinct case when asp_callreportdate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) and 
           asp_callreportdate <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
          then ActivityID end) AS CalendarEvents_asp 
FROM ActivityPointer 
WHERE ActivityTypeCode = '4201' AND 
     OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY OwnerIDName; 
+0

질문에 실제로 사용 된 두 개의 테이블이 있다는 요점이 누락되지 않았습니까? –

1

표준 SQL UNION을 사용하면 두 쿼리의 결과가 하나의 결과 집합에 제공됩니다. 로 그들이 열 같은 수와 종류가 같이

http://www.w3schools.com/sql/sql_union.asp 보통

SELECT OwnerIDName, COUNT(Distinct ActivityID) AS CalendarEvents 
FROM ActivityPointer 
WHERE 
/*Specify Activity code for Calendar Events*/ 
    ActivityTypeCode = '4201' 
/*Specify Calendar Events from this week only*/ 
AND ScheduledStart >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND ScheduledStart <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
/*Specify users to be reported on by Name*/ 
AND OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY OwnerIDName  
UNION 
SELECT OwnerIDName, COUNT(Distinct Asp_dealercallreportId) AS DealerVisits 
FROM Asp_dealercallreport 
/*Specify Calendar Events from this week only*/ 
WHERE asp_callreportdate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND asp_callreportdate <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
/*Specify to be reported on by Name*/ 
AND OwnerIdName IN ('John Doe', 'Jane Doe') 
GROUP BY OwnerIDName 
+0

감사합니다 - UNION을 읽습니다. – JimmieMaul