update табл на основе др таблицы

g_u_e_s_t123456
Дата: 17.06.2011 14:00:10
Всем доброго времени суток!
Помогите, господа, туплю...

есть 2 таблицы :
create table #TTT (id int identity(1,1), IdObj int, Sverka int)
insert into #TTT
select 5,5 union all
select 5,5 union all
select 5,5 union all
select 2,1 union all
select 2, 3 union all
select 3,2 union all
select 3, 2 union all
select 3, 7 union all
select 4,1 union all
select 4,2 union all
select 4,3 union all
select 4,4 union all
select 4,5 union all
select 4,6 union all
select 4,7

create table #T2 (IdObj int, Sverka1 int )
insert into #T2
select 5, null union all
select 2, null union all
select 3, null union all
select 4, null

надо проапдейтить #T2 сл образом : если для #TTT.ObjID значения Sverka in (1,3,6) то соот-му IdObj в #T2 проставляется Sverka1=1
если для #TTT.ObjID Sverka =2 то соот-му IdObj в #T2 проставляется Sverka1=2
если для #TTT.ObjID Sverka =5 то соот-му IdObj в #T2 проставляется Sverka1=5
если для #TTT.ObjID Sverka принимает значения (1,2,3,5,6,7) то соот-му IdObj в #T2 проставляется Sverka1=4


вопрос: можноли обойтись без курсоров и если да то как? вариант с курсорами не нравится
Заранее огромное спасибо всем ответившим !
igor_telo
Дата: 17.06.2011 14:12:34
update b set Sverka1=
case
when a.IdObj in (1,3,6) then 1
when a.IdObj in (2) then 2
when a.IdObj in (5) then 5
when a.IdObj in (1,2,3,5,6,7) then 4 end

--select *
from #TTT a inner join #T2 b on a.IdObj=b.IdObj
если я правильно понял задачу, то вот так
Уленшпигель
Дата: 17.06.2011 14:13:02
g_u_e_s_t123456,

у вас условия отбора неоднозначные
igor_telo
Дата: 17.06.2011 14:17:11
Уленшпигель
я сразу и не заметил.

думаю что он имел виду в остальных случаях Sverka1=4

если мое предположение верно то тогда
update b set Sverka1=
case
when a.IdObj in (1,3,6) then 1
when a.IdObj in (2) then 2
when a.IdObj in (5) then 5
else 4 end

--select *
from #TTT a inner join #T2 b on a.IdObj=b.IdObj
g_u-e_s_t123456
Дата: 17.06.2011 14:26:20
igor_telo,

я не совсем точно объяснил...
нет, так не пойдет ...
т.е. если по какому-то IdObj из табл #TTT все Sverka =1 либо = 3 либо = 6 то Sverka1 будет равна 1 (т.е. в #TTT для этого IdObj нет Sverka =2 или =5 или 7)
далее если по какому-то IdObj из табл #TTT все Sverka =2 то Sverka1 будет равна 2 (т.е. в #TTT для этого IdObj нет Sverka =1 или =3 или 7 или 5 )

т.е. диапазон (1,3,6) задаетсяпо принципу "только такие и никакие другие"

если не понятно, попробую объяснить еще раз
g_u_e_s_t123456
Дата: 17.06.2011 14:31:05
Уленшпигель,
т.е. результат должен быть таким:

IdObj Sverka1
2 1
3 4
4 4
5 5
igor_telo
Дата: 17.06.2011 14:36:43
если честно то про то что я неправильно налаживаю case не на то поле, я понял.
Но условия что то тяжеловато.
еще раз
если Sverka равна 1 или 3 или 6 то тогда поле Sverka1=1
Sverka равна 2 то тогда поле Sverka1=2
Sverka равна 5 то тогда поле Sverka1=5
все остальные значения которые не попали под условия значение Sverka1=4

я правильно понял?

Если нет, то тогда приведите парильный набор данных который вы должны получить на вашем примере
g_u_e_s_t123456
Дата: 17.06.2011 14:41:02
igor_telo,
получиться должно вот это

IdObj Sverka1
2 1
3 4
4 4
5 5
iap
Дата: 17.06.2011 14:42:32
igor_telo,

g_u_e_s_t123456 намекает, что значения полей для UPDATEа зависят от результатов подзапросов для текущего IdObj,
насколько я понял. А не просто от значений полей текущей записи.
Уленшпигель
Дата: 17.06.2011 15:02:07
g_u-e_s_t123456,

оно то понятно, но условия отбора все равно неоднозначные.