[英]SQL Select Column From Table Based on Another Select Statement
我有一個包含來自另一個表的列名的表。 我想運行一個更新語句來更新該表中的一些值,基於另一個。
EX:
TableA
ID|Column1|Column2
1 | 1.3 | 2.3
2 | 0 | 7
3 | 2.5 | 12.1
TableB
ID|ColumnName|MaxValue
1 | Column1 | NULL
2 | Column2 | NULL
有點像這樣:
所以在這種情況下,我想將TableB中的MaxValue更新為TableA中的最大值,其中ColumnName是TableA中的列。
這可能嗎?
你可以用游標和一些動態的sql來做。 這不是最好的辦法,但是如果你需要一個快速而骯臟的解決方案,你可以去:
DECLARE @colName VARCHAR(50), @str VARCHAR(2000), @id int
DECLARE c CURSOR FOR
SELECT id, columnName
FROM tableB
OPEN c
FETCH NEXT FROM c INTO @id, @columnName
WHILE @@fetch_status = 0
BEGIN
SET @str = 'update tableB set MaxValue = ( select max(' + @colName + ') from
tableA ) where id = ' + CONVERT(VARCHAR, @id)
EXEC ( @str )
FETCH NEXT FROM c INTO @id, @columnName
END
CLOSE c
DEALLOCATE c
如果您不想使用動態SQL,則可以始終執行此類操作
Update TableB
Set MaxValue = MaxValues.MaxValue
From TableB
Join
(
Select MaxValue = Max(Column1)
,ColumnName = 'Column1'
From TableA
Union All
Select MaxValue = Max(Column2)
,ColumnName = 'Column2'
From TableA
-- Union All ... and so on for all columns
) MaxValues
On TableB.ColumnName = MaxValues.ColumnName
請記住,如果TableA DDL發生更改,則必須更新此DML。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.