繁体   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