计算两列sql之间的差异

时间:2013-01-22 13:53:39

标签: sql sql-server sql-server-2008

在我的SQL查询中我使用CASE WHEN THEN ELSE END条件计算列值。 现在我想找到计算列和普通列之间的区别

我的查询

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以将当前查询用作CTE或派生表。以下是使用CTE的示例:

;WITH CTE AS
(
    -- your current query here
)
SELECT *, DATEDIFF(MINUTE,[Start Date],[End Date]) [End Time - Start Time]
FROM CTE