powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Зануление строк
3 сообщений из 3, страница 1 из 1
Зануление строк
    #40044730
Raze
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро всем!
Подскажите кто, как занулить строки?
Например, есть две таблицы, таблица dms и таблица chet, в каждой из этих таблиц есть два ключевых поля (kmat (код ресурса) и db (счет)) и есть второстепенные поля (dms.kol_p, chet.kol, chet.pr1) и т.д., интересует поле кол и кмат.
Проблема далее такая: в таблице dms, n-ый код ресурса (kmat) есть, а в таблице chet его может не быть, если ресурса нет в таблице chet, то нужно чтобы вместо dms.kol_p ставился 0.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
declare @undoc int = 1194504
declare @key varchar(100) = ''
declare @diff numeric(16,4) = 0
declare @rowdiff numeric(16,4) = 0

--drop table #tmpDms

select * into #tmpDms from DMS where UNDOC = @undoc order by KMAT,DB

update dms
set 
@diff = CASE WHEN (dms.KMAT+dms.db) != @key THEN chet.diff ELSE @diff - @rowdiff END,
@key = dms.KMAT+dms.db,
@rowdiff = CASE WHEN @diff > dms.kol_p THEN dms.kol_p ELSE @diff END,
kol = kol_p - @rowdiff
from (select chet.kmat, chet.db, sum(dms.dms_kol) - sum(isnull(chet.chet_kol,0)) as diff -- Было - стало, уменьшение будет > 0
from (select A.kmat, A.db, sum(isnull(A.kol,0)) as chet_kol
from chet A
where pr1 = @undoc 
group by A.kmat, A.db) as chet 
left join (select #tmpDms.kmat, #tmpDms.db, sum(#tmpDms.kol_p) as dms_kol
from #tmpDms 
group by #tmpDms.kmat, #tmpDms.db) as dms 
on dms.kmat = chet.kmat  and dms.db = chet.db
group by chet.kmat, chet.db) chet 
join #tmpDms dms on chet.kmat = dms.kmat and chet.db = dms.db

update DMS
set KOL = #tmpDms.KOL
from DMS join #tmpDms on DMS.UNDOC = #tmpDms.UNDOC and DMS.NPP = #tmpDms.NPP

drop table #tmpDms



Помогите, пожалуйста, разобраться! Запрос отрабатывает нормально, кроме тех строк которых нет в таблице chet
...
Рейтинг: 0 / 0
Зануление строк
    #40044788
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... за такое оформление надо увольнять без выходного пособия.

А так у вас есть выбор между not exists() и left outer join.

not exists() лучче.
...
Рейтинг: 0 / 0
Зануление строк
    #40044790
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raze,

Код: sql
1.
2.
update dms set kol_p = 0
where not exists (select * from chet where то, что есть в сравнении с dms)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Зануление строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]