2011-09-15 3 views
2

わかりましたので、私はこのT-SQLステートメントを持っている:RentalNosを取得し、テーブルを再利用するためにT-SQL文に格納できますか?

SELECT 
    COUNT(DISTINCT RentalNo) as Count 
FROM 
    RoomRental AS rr 
    LEFT JOIN 
     RoomLinks AS r 
     On (r.RoomNo1 = rr.RoomNo OR r.RoomNo2 = rr.RoomNo) 
     AND r.CostCentreNo = rr.CostCentreNo 
WHERE Cancelled = 0 
    AND (rr.RoomNo = @RN OR r.RoomNo2 = @RN OR r.RoomNo1 = @RN) 
    AND rr.CostCentreNo = @CCN 
    AND StartDate = @StartDate 
    AND DATEADD(minute,0-SetupTime,StartTime) < @EndBlock 
    AND DATEADD(minute,BreakdownTime,EndTime) > @StartBlock) 

は(再び声明を適用せずに)すぐに、私はそれを、SELECT *を保存することができます方法はあります、そして、または別の適用ANDWHERE句?

これは私のSQLクエリの単なる例です。私は現在、最初の終了を最初に照会した後に、すべての時間ブロックを通過するので、ループしています。

基本的に、同様のSQLクエリの繰り返しがたくさんあります。私が一度保管して、代わりにそれを操作することができれば、それは素晴らしいことでしょう。

乾杯、

ポール

+0

このSQLの出力を保存しようとしたものを追加してください。 – Ankur

+0

「テーブルをクエリに格納する」という意味に応じて、[共通テーブル式(CTE)](http://msdn.microsoft.com/en-us/library/ms175972.aspx)が必要な場合があります。 – onedaywhen

答えて

7

使用SELECT INTOと一時テーブルに結果を保存

SELECT yourcols, ... 
INTO #table 
FROM yourtables... 

は、次に、あなただけの#tableを参照することができます(#プレフィックスは一時テーブルに使用されます)他の物理的に格納されたテーブルと同様に、それに参加するなど

+2

+1ちょうど追加 - 一時テーブルの存続期間は、現在のログインセッションが終了するか、文バッチが完了するまで続きます。 –

+2

これは、OPが求めているものに対しては機能しません。彼らは、 'WHERE'または' SELECT'節を任意に遡及的に変更することについて話しています。もちろん不可能です。 –

+1

なぜですか?彼は#テーブルと照合するときに余分な述語を追加するだけです。 –

2

SELECT * 
    INTO #temp_table 
    FROM etc. 

あるいは具体的には、

SELECT * 
    INTO #temp_table 
    FROM RoomRental AS rr LEFT JOIN RoomLinks AS r 
    ON (r.RoomNo1 = rr.RoomNo OR r.RoomNo2 = rr.RoomNo) 
    AND r.CostCentreNo = rr.CostCentreNo 
WHERE Cancelled = 0 
    AND (rr.RoomNo = @RN OR r.RoomNo2 = @RN OR r.RoomNo1 = @RN) 
    AND rr.CostCentreNo = @CCN; 

は、その後、あなたがやりたい日付のセットごとに

SELECT COUNT(DISTINCT RentalNo) as Count 
    FROM #temp_table 
WHERE StartDate = @StartDate    
    AND DATEADD(minute,0-SetupTime,StartTime) < @EndBlock 
    AND DATEADD(minute,BreakdownTime,EndTime) > @StartBlock) 

を使用して#temp_tableに対するすべてのクエリを実行することができます。

+0

ねえ、私が望むものを達成する方法の正確な図解ありがとう!:)! – Doomsknight

+0

ええ、私はその時点でupvoteに十分なRepを持っていなかった:p。 – Doomsknight

0

テンポラリーテーブル(ここでは豊富な情報とネットの残りの部分)を見てください。

通常の表と同様に、問合せおよびINSERTEDできます。

関連する問題