[涉及2個表格]我需要從TABLE1獲取跟蹤編號並將該值賦予TABLE2中的跟蹤編號列,即匹配記錄。雖然,我只需要爲TABLE2中不重複的記錄執行此操作。這意味着TABLE2中的第2行和第3行不需要更新(因爲它們完全相同),但只有第1行和第4行必須更新。我如何獲得?
還有其他欄目,但我沒有包括它們來讓示例更清晰。您在下面的查詢中看到的其他字段是使記錄具有唯一性的字段。首先,我不確定我寫的查詢是否是正確的,因爲我在解決這個問題時遇到了問題。其次,選擇工作,它是選擇,所有的值表示匹配的查詢號碼,但是當我有更新我得到一個錯誤:SQL -Update Table2與來自Table1的數據,但不更新表2中的確切重複
(「Msg 116, Level 16, State 1, Line 24 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS」).
我真的很感激一些幫助,感謝
TABLE1
|Pro #| Dept|Amount |Tracking # |
|-----|-----|--------|-----------|
|___2 | _35 |______5 | ______32 |
|___2 | _35 |_____10 | ______35 |
|___2 | _35 |_____10 | ______12 |
|___2 | _35 |______8 | ______23 |
TABLE2
|Pro #| Dept | Amount |Tracking # |
|-----|-------|--------|-----------|
|___2 | _35 | ______5| YES, it needs tracking #
|___2 | _35 | _____10| NO, does not need tracking #
|___2 | _35 | _____10| NO, does not need tracking #
|___2 | _35 | ______8| YES, it needs tracking #
代碼:
UPDATE FinalTbl
SET [TrackingNumber] = TempTbl.[TrackingNumber]
FROM [FedPayHistory].[dbo].[Frt_FinalNon000TEST] FinalTbl
INNER JOIN
(Select [Source]
,[WkEndDt]
,[Yr]
,[Season]
,[Per]
,[Wk]
,[Div]
,[ProNum]
,[ApptNum]
,[Dept]
,[Vend]
,[AllocAmt]
,[RTV]
,[KeyRec]
,[BatchNum]
,[TrackingNumber]
,[MatchCode]
,count(*) as CNT
FROM [FedPayHistory].[dbo].[Frt_FinalNon000TEST]
GROUP BY [Source],[WkEndDt],[Yr],[Season],[Per],[Wk],[Div],[ProNum],[ApptNum],[Dept],[Vend],[AllocAmt],[RTV],[KeyRec],[BatchNum],[TrackingNumber],[MatchCode]
HAVING count(*)<2) JoinTable
ON
FinalTbl.[Source] = JoinTable.[Source] and
FinalTbl.[Yr] = JoinTable.[Yr] and
FinalTbl.[Season] = JoinTable.[Season] and
FinalTbl.[Per] = JoinTable.[Per] and
FinalTbl.[Wk] = JoinTable.[Wk] and
FinalTbl.[Div] = JoinTable.[Div] and
FinalTbl.[Dept] = JoinTable.[Dept] and
FinalTbl.[Vend] = JoinTable.[Vend] and
FinalTbl.[KeyRec] = JoinTable.[KeyRec] and
FinalTbl.[RTV] = JoinTable.[RTV] and
FinalTbl.[AllocAmt] = JoinTable.[AllocAmt] and
FinalTbl.[ProNum] = JoinTable.[ProNum]
INNER JOIN [FedPayHistory].[dbo].[Frt_tempNon000] TempTbl
ON FinalTbl.Source = TempTbl.Source and
FinalTbl.[Yr] = TempTbl.[Yr] and
FinalTbl.[Season] = TempTbl.[Season] and
FinalTbl.[Per] = TempTbl.[Per] and
FinalTbl.[Wk] = TempTbl.[Wk] and
FinalTbl.[Div] = TempTbl.[Div] and
FinalTbl.[Dept] = TempTbl.[Dept] and
FinalTbl.[Vend] = TempTbl.[Vend] and
FinalTbl.[KeyRec] = TempTbl.[KeyRec] and
FinalTbl.[RTV] = TempTbl.[RTV] and
FinalTbl.[AllocAmt] = TempTbl.[AllocAmt] and
FinalTbl.[ProNum] = TempTbl.[ProNum] and
JoinTable.[Source] = TempTbl.[Source] and
JoinTable.[Yr] = TempTbl.[Yr] and
JoinTable.[Season] = TempTbl.[Season] and
JoinTable.[Per] = TempTbl.[Per] and
JoinTable.[Wk] = TempTbl.[Wk] and
JoinTable.[Div] = TempTbl.[Div] and
JoinTable.[Dept] = TempTbl.[Dept] and
JoinTable.[Vend] = TempTbl.[Vend] and
JoinTable.[KeyRec] = TempTbl.[KeyRec] and
JoinTable.[RTV] = TempTbl.[RTV] and
JoinTable.[AllocAmt] = TempTbl.[AllocAmt] and
JoinTable.[ProNum] = TempTbl.[ProNum]
錯誤消息是很清楚。您的子查詢返回多於一行。而且你還有另一個問題,你的子查詢有多個列,它如何知道要使用哪一列?您需要查看使用帶有聯接而不是子查詢的更新語句。 –