0

SQL Server 2005 を使用しています。3 つの異なるテーブルに関する情報を収集しようとしています。

表 1 は[User_Table]で、次のようになります。

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

表 2 は[Interactions]で、次のようになります。

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 は[Repeats]で、次のようになります。

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

私ができる必要があるのは、[インタラクション] からのコールの合計を、インタラクションの種類と日ごとの合計として合計し、それらを Lead と 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

どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1

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

ここで実際に見てください:https://data.stackexchange.com/stackoverflow/query/68935/joining-3-tables-on-multiple-fields-sql-server

于 2012-05-03T20:51:29.360 に答える