0

我有 2 张桌子,如下所述。

create table #tbl_1
    (
        nm varchar(20) not null,
        min_val float,
        max_val float,
        dept varchar(50)
    )

insert into #tbl_1(nm) values('A')  
insert into #tbl_1(nm) values('B')  
insert into #tbl_1(nm) values('C')

create table #tbl_2
    (
        nm varchar(20) not null,
        val float
    )

insert into #tbl_2 values('A', 10)
insert into #tbl_2 values('A', 20)
insert into #tbl_2 values('A', 30)
insert into #tbl_2 values('B', 50)
insert into #tbl_2 values('B', 40)
insert into #tbl_2 values('C', 15)
insert into #tbl_2 values('D', 60)
insert into #tbl_2 values('B', 65)

现在更新操作:

update #tbl_1 set min_val=(select min(val) from #tbl_2 where #tbl_1.nm=#tbl_2.nm)
update #tbl_1 set max_val=(select max(val) from #tbl_2 where #tbl_1.nm=#tbl_2.nm)

select * from #tbl_1
drop table #tbl_1
drop table #tbl_2

在我的真实表中,#tbl_1 有 114 列,它们从 17 个不同的表(如 #tbl_2)更新。所以当我更新#tbl_1 时,我必须执行113 SQL 语句。有什么方法可以只执行 17 个 SQL 语句或 1 个 SQL 语句来更新#tbl_1?

提前致谢。

4

1 回答 1

1

您可以使用连接进行更新:

update t1
    set min_val = t2.minval,
        max_val = t2.maxval
    from #tbl_1 t1 join
         (select t2.nm, min(t2.val) as minval, max(t2.val) as maxval
          from #tbl_2 t2
          group by t2.nm
         ) t2sum
         on t1.nm = t2sum.nm
于 2013-08-12T02:42:00.573 回答