2016-07-12 12 views
2

私は4つの一時テーブルを作成し、最後に内側の結合を持つ大きな選択でレコードを返すストアドプロシージャを持っています。これはレコードを返すselectのカットダウンバージョンです。同じID1と#TEMP_Submittalテーブルに対して複数の#TEMP_Receiveと#TEMP_Returnたレコードが存在する可能性があること数に基づくSQLの更新

SELECT R.*, 
    REC.Status_Date as [Receive Status Date], 
    RET.Status_Date as [Return Status Date] 
FROM #Records R 
    INNER JOIN #Temp_Receive REC ON R.ID1 = REC.ID1 
    INNER JOIN #Temp_Return RET ON R.ID1 = RET.ID1 
    INNER JOIN #Temp_Submittal SUB ON SUB.RecID = REC.ID AND SUB.RetID = RET.ID 

注意それらを接続するものです。

結果に含まれる2つの異なるテーブルに2つのステータス日付の間の休日の数を含めるには、この手順を変更する必要があります。私は休暇の数を別のテーブルから数えることができます。このようなもの:

Select count(*) 
From Holiday_List 
Where Holiday_Date between REC.Status_Date and RET.Status_Date 

#Temp_ReceiveテーブルにHoliday_Count列を追加しました。 Holiday_Listテーブルのカウントを使用して、参加のHoliday_Count列を更新するにはどうすればよいですか?私はこれを試したことがありますが、私は見つけることができますが、これはリモートで有効なSQL構文ではありません。

UPDATE 
( #Records R 
    INNER JOIN #TEMP_Receive REC ON R.ID1 = REC.ID1 
    INNER JOIN #TEMP_Return RET ON R.ID1 = RET.ID1 
    INNER JOIN #TEMP_Submittal SUB ON SUB.RecID = REC.ID AND SUB.RetID = RET.ID) 
SET REC.Holiday_Count = 
(SELECT COUNT(*) 
    FROM HOLIDAY_LIST HOL 
    WHERE HOL.HOLIDAY_DATE between #TEMP_Receive.Status_Date AND #TEMP_Receive.Status_Date) 

は、私は、行が更新されるかを確認するためにselectステートメントを構築してみMS SQL Serverの2012

答えて

0

1)を実行していますよ。あなたの場合、クエリは次のようになります。すべてがOKに見えるとき

SELECT R.*, 
    REC.Status_Date as [Receive Status Date], 
    RET.Status_Date as [Return Status Date], 
    (Select count(*) 
     From Holiday_List 
     Where Holiday_Date between REC.Status_Date and RET.Status_Date) cnt 
FROM #Records R 
    INNER JOIN #Temp_Receive REC ON R.ID1 = REC.ID1 
    INNER JOIN #Temp_Return RET ON R.ID1 = RET.ID1 
    INNER JOIN #Temp_Submittal SUB ON SUB.RecID = REC.ID AND SUB.RetID = RET.ID 

2)その後、update声明でselect部品を交換。

update #Temp_Receive 
    set Holiday_Count = (Select count(*) 
     From Holiday_List 
     Where Holiday_Date between REC.Status_Date and RET.Status_Date) 
FROM #Records R 
    INNER JOIN #Temp_Receive REC ON R.ID1 = REC.ID1 
    INNER JOIN #Temp_Return RET ON R.ID1 = RET.ID1 
    INNER JOIN #Temp_Submittal SUB ON SUB.RecID = REC.ID AND SUB.RetID = RET.ID 

はまた、複数のinner joinは、暗黙的に同じID1 sがすべての4つのテーブルに存在することを示唆していることに注意してください。

+0

これは魅力的だった。ニースステップワイズの答え。助けてくれてありがとう! –

関連する問題