2012-05-03 47 views
0

我正在使用SQL Server 2005.我试图收集3个不同表上的信息。在多个字段上连接3个表 - SQL Server

表1是[USER_TABLE]和看起来像:

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

表2是[相互作用]和看起来像:

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 

我需要什么,能够做的就是SUM从[互动]总通话按互动类型,白天和他们组共由铅和Int_Date = Repeat_d

我怎么想的结果看:

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 

我的查询到目前为止是这样的:

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 

任何帮助将非常感激。谢谢!

+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