Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Please help me. SQL while  [new]
Cah12345
Guest
Добрый вечер. Помагите пожалюста. Я новичок.
Есть 2 таблица
TOsnovnoy
IDProduct	Saldo	Deb	Kre
125	         500		
200	         700		
201	         600		
205	         780		
230	         256		
350	         100		
400	          1		


и TDebet
IDProduct	Deb
125	      200
200	      100
201	       50
205	       40
207	       70
220	       90
400           100

Я должен написать код с помощью
while
. Проверить 1-е record из TDebet. Если IDProduct (125) в TOsnovnoy есть тогда
update TOsnovnoy set Deb=(select Deb from TDebet where IDProduct=125) where IDProduct=125
в противном случе
insert into TOsnovnoy(IDProduct,Saldo,Deb) 
    select IDProduct,0,Deb 
    from TDebet
    where IDProduct=125


В конце результат должен быть так.

IDProduct	Saldo	Deb	Kre
125 	         500	200	
200	         700	100	
201	         600	50	
205	         780	40	
207	          0	70	
220	          0	60	
230	        256		
350	        100		
400	         1	100	
9 дек 12, 22:34    [13603461]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Cah12345,обязательно с помощью while ?
9 дек 12, 23:20    [13603558]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Cah12345,

Ваша задача элементарно решается без всяких циклов. Если позволяет версия сервера, то инструкцией MERGE, если нет, то UPDATE + INSERT.
9 дек 12, 23:52    [13603656]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
invm
Ваша задача элементарно решается без всяких циклов. Если позволяет версия сервера, то инструкцией MERGE, если нет, то UPDATE + INSERT.

if(пользование цикла не принципиально)
then +100500
10 дек 12, 00:02    [13603700]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
Cah12345
Guest
а как можно с помощью while ???
10 дек 12, 00:12    [13603743]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Cah12345
а как можно с помощью while ???
Так же как без while, только в цикле повторить для каждой строки.
10 дек 12, 01:26    [13603996]     Ответить | Цитировать Сообщить модератору
 Re: Please help me. SQL while  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Cah12345,
через зд вот так можно:
declare @t table(N int,id int,deb int);
with cte(N,id,deb) as
(
  select ROW_NUMBER()over(order by IDProduct)as N,* from TDebet
)
insert into @t 
	select * from cte;
		
declare @minN int,@ID int,@deb int;
while exists(select * from @t)
	begin		
		select @minN=MIN(N)from @t;
		select @deb=deb from @t where N=@minN
		select @ID=id from @t where N=@minN
		
		
		if(@ID in(select IDProduct from TOsnovnoy))
			begin
				update TOsnovnoy 
					set deb=@deb 
						where IDProduct=@ID
			end
		else
			begin
				insert into TOsnovnoy 
					select @ID,0,@deb,null	
			end
		delete from @t where N=@minN		
	end
	

как уже упомянул invm, лучше через merge
MERGE TOsnovnoy AS target
    USING TDebet AS source
    ON (target.IDProduct = source.IDProduct)
    WHEN MATCHED THEN 
        UPDATE SET deb = source.deb
	WHEN NOT MATCHED THEN	
	    INSERT (IDProduct,Saldo, Deb)
	    VALUES (source.IDProduct,0, source.Deb);
10 дек 12, 03:23    [13604080]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить