Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление данных построчно  [new]
LisSp
Member

Откуда:
Сообщений: 186
Добрый день!
Подскажите, пожалуйста, где что в моём коде не так и как надо правильно?
Задача такая:
Есть 2 таблицы. Надо у таблицы test1 найти такие же значения столбцов STL1 и STL2 как в таблице test и вычесть из test1.STL3 значение test.STL3.
У меня получается вычесть только сразу всю сумму STL3. А надо построчно. Но как - я не знаю. Поэтому у меня в коде формула суммы указана. Подскажите, пожалуйста, как такое сделать?
P.S. Должно получится вот так:
таблица test1
STL1 STL2STL3
Name1 lastname1 5
Name2 lastname2 4
Name4 lastname4 20



А вот мой неправильный код:

CREATE TABLE [dbo].[test](
    STL1 NVARCHAR(30),
    STL2 NVARCHAR(30),
	STL3 INT)

INSERT INTO [dbo].[test] VALUES('Name1','lastname1','5')
INSERT INTO [dbo].[test] VALUES('Name2','lastname2','6')
INSERT INTO [dbo].[test] VALUES('Name3','lastname3','8')

CREATE TABLE [dbo].[test1](
    STL1 NVARCHAR(30),
    STL2 NVARCHAR(30),
	STL3 INT)

INSERT INTO [dbo].[test1] VALUES('Name1','lastname1','10')
INSERT INTO [dbo].[test1] VALUES('Name2','lastname2','10')
INSERT INTO [dbo].[test1] VALUES('Name4','lastname4','20')

DECLARE @STL1 NVARCHAR(30)  
DECLARE @STL2 NVARCHAR(30) 
DECLARE @STL3 INT

DECLARE test_cursor CURSOR FOR 
SELECT  STL1, STL2, STL3
FROM  [test] 

     
Open test_cursor  
FETCH NEXT FROM test_cursor INTO @STL1, @STL2, @STL3 

WHILE @@FETCH_STATUS = 0
BEGIN 
    SELECT @STL1, @STL2, @STL3
	BEGIN

UPDATE test1
SET STL3=STL3-(SELECT SUM(STL3) FROM test)
WHERE STL1 IN (SELECT STL1 FROM test) AND STL2 IN (SELECT STL2 FROM test)

        END

     FETCH NEXT FROM test_cursor INTO @STL1, @STL2, @STL3
END


CLOSE test_cursor 
DEALLOCATE test_cursor 

SELECT * FROM test1
DROP TABLE [dbo].[test]
DROP TABLE [dbo].[test1]
25 фев 16, 13:18    [18861943]     Ответить | Цитировать Сообщить модератору
 Re: Удаление данных построчно  [new]
Glory
Member

Откуда:
Сообщений: 104751
LisSp
У меня получается вычесть только сразу всю сумму STL3. А надо построчно. Но как - я не знаю. Поэтому у меня в коде формула суммы указана. Подскажите, пожалуйста, как такое сделать?

Вы JOIN что ли не можете сделать ?
25 фев 16, 13:20    [18861956]     Ответить | Цитировать Сообщить модератору
 Re: Удаление данных построчно  [new]
LisSp
Member

Откуда:
Сообщений: 186
Glory
Вы JOIN что ли не можете сделать ?


с JOIN у меня у значение test1.STL1='Name4' тогда NULL получается. Хотя должно '20' остаться.

UPDATE test1
SET STL3=A.STL3-B.STL3
FROM test1 A LEFT JOIN test B ON A.STL1=B.STL1 AND A.STL2=B.STL2
25 фев 16, 13:38    [18862045]     Ответить | Цитировать Сообщить модератору
 Re: Удаление данных построчно  [new]
Glory
Member

Откуда:
Сообщений: 104751
LisSp
с JOIN у меня у значение test1.STL1='Name4' тогда NULL получается. Хотя должно '20' остаться.

Наверное потому, что кто-то не знает разницы между типами JOIN-ов ?
25 фев 16, 13:39    [18862055]     Ответить | Цитировать Сообщить модератору
 Re: Удаление данных построчно  [new]
LisSp
Member

Откуда:
Сообщений: 186
Glory
Наверное потому, что кто-то не знает разницы между типами JOIN-ов ?

аа..точно! с INNER JOIN всё срабатывает как надо! Спасибо!))) Простите мою глупость..
25 фев 16, 14:20    [18862316]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить