• geert.de.vylder (3/4/2013)


    Hi ChrisM@Work,

    Yes, event_channel has to be populated, even if there isn't a match in the Tussen_Ticket table. This is because I have to update the results into another table in another database.

    Thank you very much for your help and assistance.

    Greetz,

    Geert

    You're very welcome. Your cooperation is very very much appreciated. Here's a modified query which takes Event_Channel into account as discussed:

    SELECT mx.Ticket_Closed_Date, mx.Interval, op.*

    FROM ( -- create a matrix containing all intervals from Tijdsintervallen and all dates & Event_Channels from Tussen_Tickets

    SELECT *

    FROM Tijdsintervallen

    CROSS JOIN (

    SELECT DISTINCT Ticket_Closed_Date = CAST(Ticket_Closed_DateTime AS DATE)

    FROM Tussen_Tickets

    ) d

    CROSS JOIN (

    SELECT DISTINCT Event_Channel

    FROM Tussen_Tickets

    ) e

    ) mx

    OUTER APPLY (

    SELECT tt.Event_Channel,

    DVBIntern = SUM(tt.DVBIntern),

    DVBExtern = SUM(tt.DVBExtern),

    Tijdsduur = SUM(tt.Tijdsduur),

    WrapUp = SUM(tt.WrapUp),

    OnHold = SUM(tt.OnHold),

    Talk = SUM(tt.Talk),

    RowsAggregated = COUNT(*) -- not in spec but handy to have

    FROM Tussen_Tickets tt

    CROSS APPLY (

    SELECT

    Ticket_Closed_Time = CAST(tt.Ticket_Closed_DateTime AS TIME(3)),

    Ticket_Closed_Date = CAST(tt.Ticket_Closed_DateTime AS DATE)

    ) ta

    WHERE ta.Ticket_Closed_Time BETWEEN mx.beginTijdsinterval AND mx.eindTijdsinterval

    AND ta.Ticket_Closed_Date = mx.Ticket_Closed_Date

    AND tt.Event_Channel = mx.Event_Channel

    GROUP BY ta.Ticket_Closed_Date, tt.Event_Channel

    ) op

    ORDER BY mx.Ticket_Closed_Date, mx.Interval, op.Event_Channel;

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden