2013-01-22 428 views
1

在我的SQL查詢中,我正在使用CASE WHEN THEN ELSE END條件計算列值。 現在我想找到計算列和正常列計算兩列之間的差異sql

我的查詢

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我已經使用CASE因此多了一個欄之間的差異我無法計算差異。

數據庫是SQL SERVER 2008

回答

1

您可以使用當前查詢的CTE或派生表。以下是使用CTE的示例:

;WITH CTE AS 
(
    -- your current query here 
) 
SELECT *, DATEDIFF(MINUTE,[Start Date],[End Date]) [End Time - Start Time] 
FROM CTE 
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