2011-02-10 9 views
2

私はhereと同じ問題を抱えていますが、残念ながら解決策はMS SQL Serverでは機能しません。 MS SQL Serverにも同様の構文がありますか?SELECTステートメントで変数を設定

注:私のクエリは例のように単純ではありません。私はTooLateTimeのケースでDifferenceMinutesを再利用したいと思います。

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 

あなたのソースを代用する必要があります内部クエリのFROMセクションの "TableName"のテーブル。

計算された値をこのようなネストされた選択にローリングすることによって、外部クエリで指定した名前でそれらを参照することができます。

あなたが値ごとに変数を設定したい場合は、次のようにあなたはそれを行うことができますが、あなただけのクエリから1行を返すしていることを確認する必要があります:

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

ええ、そうです。私はそれを修正します。 –