2012-05-03 5 views
0

SQL Server 2005를 사용하고 있습니다. 3 개의 다른 테이블에 대한 정보를 수집하려고합니다. 표 2 [상호 작용]이고 같다여러 필드에 3 개의 테이블 조인 - SQL Server

Lead ID 
1  5 
1  8 
1  12 
2  13 
2  14 
2  15 
2  18 
2  24 

: 같이

표 1 [User_Table]이며 보이는

Int_Date ID Interaction 
2012-03-01 5 Hang Up 
2012-03-01 13 Reset 
2012-03-01 8 Basic 
2012-03-01 13 Basic 
2012-03-02 14 Reset 
2012-03-02 12 Advanced 
2012-03-02 12 Hang Up 
2012-03-02 24 Reset 
2012-03-02 5 Basic 

표 3 [반복] 인 모양은 다음과 같습니다.

Repeat_d ID R_Interaction 
2012-03-01 13 Reset 
2012-03-01 8 Basic 
2012-03-02 14 Reset 
2012-03-02 12 Advanced 
2012-03-02 24 Reset 
내가 할 수있을 필요가있는 무엇 (210)

내가 결과를 원하는 어떻게 납 및 Int_Date = Repeat_d

에 의한 상호 작용 유형과 일 그룹을 당 총으로 [상호 작용]의 총 통화 보는 SUM입니다 :

어떤 도움이 많이 주시면 감사하겠습니다

DECLARE @StartDate smalldatetime, @EndDate smalldatetime, @TL_ID as smallint 
SET @StartDate = '20120301' 
SET @EndDate = '20120331' 
SET @TL_ID = '2' 
SELECT 
DATEADD(dd, DATEDIFF(dd, 0, [Int_Date]),0) as [Int_Date] 
,[Interaction] 
,COUNT([Interaction]) as [Total_Repeats] 
FROM [Interactions] (NOLOCK) 
LEFT JOIN [user_table] (NOLOCK) ON [id] = [id] 
WHERE [Int_Date] BETWEEN @StartDate AND @EndDate 
AND [Lead] = @TL_ID 
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, [Int_Date]),0), [Interaction] 
ORDER BY [Int_Date], [Total_Repeats] DESC 

:

DATE  Lead Total_Interactions Total_Repeats Interaction 
2012-03-01 1     1    0 Hang Up 
2012-03-01 1     2    1 Basic 
2012-03-01 2     1    1 Reset 
2012-03-01 2     1    0 Basic 
2012-03-02 1     1    1 Advanced 
2012-03-02 1     1    0 Hang Up 
2012-03-02 1     1    0 Basic 
2012-03-02 2     2    1 Reset 

내 쿼리 지금까지처럼 보인다. 고맙습니다!

+1

. 다음 날에 발생하는 상호 작용은 여기에 포함되지 않습니다. 그 맞습니까? – swasheck

+0

네 맞습니다. – Brad

답변

0

다음 쿼리를보십시오 :

DECLARE 
    @StartDate SMALLDATETIME, 
    @EndDate SMALLDATETIME, 
    @TL_ID SMALLINT 

SELECT 
    @StartDate = '2012-03-01', 
    @EndDate = '2012-03-31', 
    @TL_ID = '2' 

SELECT 
    DATEADD(DD, DATEDIFF(DD, 0, [Int_Date]), 0) AS [Int_Date], 
    u.[Lead], 
    i.[ID], 
    COUNT(1) + COUNT(r.[ID]) AS [Total_Interactions], 
    COUNT(r.[ID]) AS [Total_Repeats], 
    i.[Interaction] 
FROM 
    [Interactions] AS i WITH (NOLOCK) 
JOIN 
    [User_Table] AS u WITH (NOLOCK) 
ON 
    u.[ID] = i.[ID] 
LEFT OUTER JOIN 
    [Repeats] AS r WITH (NOLOCK) 
ON 
    r.[ID] = i.[ID] 
AND r.[Repeat_d] = i.[Int_Date] 
AND r.[R_Interaction] = i.[Interaction] 
WHERE 
    i.[Int_Date] BETWEEN @StartDate AND @EndDate 
AND u.[Lead] = @TL_ID 
GROUP BY 
    DATEADD(DD, DATEDIFF(DD, 0, [Int_Date]), 0), 
    u.[Lead], 
    i.[ID], 
    i.[Interaction] 
ORDER BY 
    [Int_Date], 
    u.[Lead], 
    i.[ID], 
    [Total_Repeats] DESC 

여기에 직접보기를 : 그래서 당신은, 당신이 특정 일에 리드 당 상호 작용의 양을 찾고 요구 한 내용을 기반으로 http://data.stackexchange.com/stackoverflow/query/68935/joining-3-tables-on-multiple-fields-sql-server