toadmr
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 Добавлено: Разобрался, использовал функцию ISNULL, в результате запрос получился такой: Код: select v1.product 'Наименование товара', (v1.cnt - isnull(v2.cnt,0)) 'Количество на складе' from purch v1 left join sales v2 on v1.product = v2.product where (v1.cnt - isnull(v2.cnt,0)) != 0 |
| Всего записей: 66 | Зарегистр. 12-04-2023 | Отправлено: 11:34 24-06-2025 | Исправлено: toadmr, 11:40 24-06-2025 |
|