2013-08-12 6 views
0

У меня есть 2 таблицы, описанные ниже.Обновление нескольких столбцов таблицы из одной таблицы в одной команде в SQL Server 2008

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 Statement. Есть ли способ, которым я могу выполнить только 17 SQL Statement или 1 SQL Statement для обновления # tbl_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 
+0

второй и третьей линии набор min_val = t2.minval, max_val = t2.maxval будет t2sum.minval, t2sum.maxval. Сейчас все в порядке. Благодарю. –

Смежные вопросы