2011-02-10 3 views
2

У меня такая же проблема, как описано here, к сожалению, решение не работает для MS SQL Server. Существует ли аналогичный синтаксис для MS SQL Server?Установить переменную в инструкции SELECT

Примечание: мой запрос не так прост, как в примере. Я хотел бы повторно использовать DifferenceMinutes в случае TooLateTime.

DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes, 
CASE 
    WHEN DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) < 0 THEN NULL 
    ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108) 
END AS TooLateTime 

ответ

4

Это немного трудно точно сказать, что вы пытаетесь сделать, но я думаю, что это может быть то, что вы ищете:

SELECT 
    DifferenceMinutes, 
    CASE 
     WHEN DifferenceMinutes < 0 THEN NULL 
     ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108) 
    END AS TooLateTime 
FROM (
    SELECT 
     DayOfWeekStopTime, 
     DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes 
    FROM TableName 
) X 

Вы должны заменить ваш источник таблицы для «TableName» в разделе FROM внутреннего запроса.

Перевернув ваши вычисленные значения во вложенный выбор, как это, вы можете ссылаться на них любым именем, которое вы даете им во внешнем запросе.

Если вы хотите установить переменные для каждого из значений, вы можете сделать это следующим образом, но вы должны убедиться, что вы только возвращение на одну строку из запроса:

DECLARE @DifferenceMinutes int, @TooLateTime varchar(30) 
SELECT 
    @DifferenceMinutes = DifferenceMinutes, 
    @TooLateTime = CASE 
     WHEN DifferenceMinutes < 0 THEN NULL 
     ELSE CONVERT(varchar, GETDATE() - DayOfWeekStopTime, 108) 
    END 
FROM (
    SELECT 
     DayOfWeekStopTime, 
     DATEDIFF(MINUTE, DayOfWeekStopTime, GETDATE()) AS DifferenceMinutes 
    FROM TableName 
) X 
+0

Немного более сложный, чем я надеялся, но работаю. Спасибо. Кроме того, я думаю, что X и конец этих запросов предназначены для D. – Stijn

+0

Да, вы правы. Я исправлю это. –

Смежные вопросы