2013-01-22 400 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