1

私のSQLクエリでは、CASE WHEN THEN ELSE ENDConditionを使用して列の値を計算しています。今、私は計算された列と通常の列の違いを見つけたいです

私のクエリ

SELECT  T.Ticket [Ticket],
        TT.TicketType [Ticket Type],
        T.Dependency [Dependency],
        CASE 
                WHEN (
                        SELECT  TOP 1 f1.UpdatedOn
                        FROM    TicketTypeFollowUp AS f1
                        WHERE   f1.UpdatedOn < T.UpdatedOn
                                AND f1.Ticket = 61423
                        ORDER   BY f1.UpdatedOn DESC
                    ) IS NULL
                THEN Ticket.TicketRaisedOn
                ELSE (
                        SELECT  TOP 1 f1.UpdatedOn
                        FROM    TicketTypeFollowUp AS f1
                        WHERE   f1.UpdatedOn < T.UpdatedOn
                                AND f1.Ticket = 61423
                        ORDER   BY f1.UpdatedOn DESC
                    )
                END [Start Date],
        T.UpdatedOn [End Date],
        L.EmpName [Updated By]
FROM    dbo.TicketTypeFollowUp T
        LEFT JOIN dbo.Ticket
                ON T.Ticket = Ticket.Code
        LEFT JOIN dbo.TicketType TT
                ON T.TicketType = TT.Code
        LEFT JOIN LoginUser L
                ON T.UpdatedBy = L.Code
WHERE Ticket = 61423

クエリ結果

Ticket  Type    Dependency  Start Date              End Date                Updated By
61423   FLM     AGS         2013-01-22 15:50:08.757 2013-01-22 18:35:50.893 Kedar S

End Time - Start Time使用した列をもう1つ表示したいCASEので、差を計算できません。

データベースはSQLSERVER2008です

4

2 に答える 2

2
with lastUpdate(ticket, lastUpdate) as (
        select  ticket,
                max(updateOn)
        from    TicketTypeFollowUp
        group by ticket)
SELECT  T.Ticket [Ticket],
        TT.TicketType [Ticket Type],
        T.Dependency [Dependency],
        coalesce(lastUpdate, ticketRaisedOn) [Start Date],
        T.UpdatedOn [End Date],
        datediff(mi, coalesce(lastUpdate, ticketRaisedOn), T.UpdatedOn) durationMins,
        L.EmpName [Updated By]
FROM    dbo.TicketTypeFollowUp T
        LEFT JOIN dbo.Ticket
                ON T.Ticket = Ticket.Code
        LEFT JOIN dbo.TicketType TT
                ON T.TicketType = TT.Code
        LEFT JOIN LoginUser L
                ON T.UpdatedBy = L.Code
        left join lastUpdate lu on t.ticket = lu.ticket
WHERE Ticket = 61423
于 2013-01-22T13:56:15.423 に答える
1

現在のクエリをCTEまたは派生テーブルとして使用できます。CTEを使用した例を次に示します。

;WITH CTE AS
(
    -- your current query here
)
SELECT *, DATEDIFF(MINUTE,[Start Date],[End Date]) [End Time - Start Time]
FROM CTE
于 2013-01-22T14:01:19.027 に答える