Начало » Использование СУБД » Microsoft SQL Server » Найти разницу между поступлением и реализацией в таблице (Операции вычитания количества между поступлением и реализацией)
Найти разницу между поступлением и реализацией в таблице [сообщение #6126] |
Tue, 24 June 2025 11:23  |
mrtoad
Сообщений: 2 Зарегистрирован: June 2025
|
Junior Member |
|
|
Приветствую!
Я начинающий аналитик и я уже всю голову сломал как мне написать правильный запрос.
Есть таблица содержащая поступления и реализации. Мне нужно посчитать остатки на складе.
Я не нашел ничего лучше, чем использовать временные таблицы и соединить их через JOIN.
У меня все корректно посчиталось кроме одной строки (в одной таблице эта строка присутствует, в другой нет.
Напишу все запросы, может быть подскажите более элегантный вариант...
Есть таблица с данными - operations_data (содержит поступления и реализации)
select top 10 * from operations_data
dt tm order_number order_type_id product_category_id product_id manufacturer_id cnt price selling_price
2000-07-30 09:32:00.0000000 1 1 2 5 2 5400 3.2 null
2000-07-30 09:55:00.0000000 1 2 2 5 2 2870 3.2 3.33
2000-08-04 10:10:00.0000000 2 2 2 5 2 2336 3.2 3.48
2000-08-04 11:04:00.0000000 3 2 2 5 2 26 3.2 3.58
2000-08-04 11:21:00.0000000 4 2 2 5 2 9 3.2 3.28
2000-08-04 12:01:00.0000000 5 2 2 5 2 36 3.2 3.41
2000-08-08 11:49:00.0000000 6 2 2 5 2 48 3.2 3.38
2000-08-08 12:29:00.0000000 7 2 2 5 2 7 3.2 3.58
2000-08-08 13:16:00.0000000 8 2 2 5 2 57 3.2 3.31
2000-08-08 13:19:00.0000000 2 1 1 8 1 400 16.49 null
Есть справочники: order_type (содержит типы операций и их идентификаторы) и product (содержит названия товаров и их идентификаторы)
Я создал две таблицы: purch и sales, в которые поместил данные по суммарному количеству закупок и продаж
create table purch (
product varchar(255),
cnt int
)
create table sales (
product varchar(255),
cnt int
)
insert into purch select t2.product, sum(t1.cnt) purchase
from operations_data t1
join product t2 on t1.product_id = t2.product_id
where t1.order_type_id = 1
group by t2.product
insert into sales select t2.product, sum(t1.cnt) sales
from operations_data t1
join product t2 on t1.product_id = t2.product_id
where t1.order_type_id = 2
group by t2.product
select product 'Наименование товара', cnt 'Количество на складе' from purch
except
select product 'Наименование товара', cnt 'Количество на складе' from sales
select v1.product 'Наименование товара', (v1.cnt - v2.cnt) 'Количество на складе'
from purch v1
left join sales v2 on v1.product = v2.product
В итоге, я получаю все стоки, но в последней, вместо количества получаю null и никак не могу понять, как мне сделать чтобы там отобразилось количество непроданного товара
Наименование товара Количество на складе
uniflott 2200
Наименование товара Количество на складе
epoxy grouts 0
everal aqua 10 0
everal aqua 10 interior 0
everal aqua 40 0
fugen 0
glue cm 11 0
glue cm 17 0
grout 0
helmi 10 0
helmi 30 0
helmi primer 0
kiva 10 0
kiva 30 0
kiva 70 0
partial fill cavity slab 100 0
partial fill cavity slab 50 0
partial fill cavity slab 80 2
polyurethane foam 0
polyurethane foam premium of winter 0
rockclose insulated dpc 20 0
rotband 0
uniflott null
Для товара uniflott должно быть количество 2200
[Обновления: Tue, 24 June 2025 11:29] Известить модератора
|
|
|
|
Переход к форуму:
Текущее время: Thu Jun 26 21:38:17 GMT+3 2025
Общее время, затраченное на создание страницы: 0.00709 секунд
|