簡體   English   中英

SQL根據另一個Select語句從表中選擇列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM