Unir 3 tablas en múltiples campos - SQL Server

Estoy usando SQL Server 2005. Estoy tratando de recopilar información en 3 tablas diferentes.

La tabla 1 es [Usuario_Tabla] y se parece a:

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

La tabla 2 es [Interacciones] y se parece a:

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

La tabla 3 es [Se repite] y se parece a:

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

Lo que necesito poder hacer es SUMAR las llamadas totales de [Interacciones] como un total por tipo de interacción y día y agruparlas por Cliente potencial e Int_Date = Repeat_d

Cómo quiero que se vea el resultado:

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

Mi consulta hasta ahora se parece a:

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

Cualquier ayuda será muy apreciada. ¡Gracias!

preguntado el 03 de mayo de 12 a las 18:05

Entonces, según lo que haya solicitado, está buscando la cantidad de interacciones por cliente potencial en un día determinado. Las interacciones que ocurren en un día siguiente no están dentro del alcance aquí. ¿Es eso correcto? -

1 Respuestas

Prueba la siguiente consulta:

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

Véalo en acción aquí: https://data.stackexchange.com/stackoverflow/query/68935/joining-3-tables-on-multiple-fields-sql-server

Respondido el 18 de enero de 21 a las 12:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.