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

Откуда:
Сообщений: 8
Добрый день!

Подскажите пожалуйста как правильно реализовать запрос:

мне нужно посчитать стоимость материала в изделии по такой формуле:
МАТЕРИАЛ.стоимость_материала_за_метр * МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.колво_материала * ИЗДЕЛИЕ_ЗАКАЗ.колво_изделий

но проблема в том, что если изделие состоит из двух материалов, то по формуле выше считается только стоимость одного материала, как это можно исправить?
5 ноя 17, 21:48    [20928967]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Rankatan
Member

Откуда:
Сообщений: 250
select SUM(МАТЕРИАЛ.стоимость_материала_за_метр * МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.колво_материала * ИЗДЕЛИЕ_ЗАКАЗ.колво_изделий)
from ИЗДЕЛИЕ_ЗАКАЗ
inner join МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ
	on ИЗДЕЛИЕ_ЗАКАЗ.ID=МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.ID
inner join МАТЕРИАЛ
	on МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.ID=МАТЕРИАЛ.ID
group by ИЗДЕЛИЕ_ЗАКАЗ.ID изделения
5 ноя 17, 22:16    [20929040]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Rankatan
select SUM(МАТЕРИАЛ.стоимость_материала_за_метр * МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.колво_материала * ИЗДЕЛИЕ_ЗАКАЗ.колво_изделий)
from ИЗДЕЛИЕ_ЗАКАЗ
inner join МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ
	on ИЗДЕЛИЕ_ЗАКАЗ.ID=МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.ID
inner join МАТЕРИАЛ
	on МАТЕРИАЛ_ИЗДЕЛИЕ_ЗАКАЗ.ID=МАТЕРИАЛ.ID
group by ИЗДЕЛИЕ_ЗАКАЗ.ID изделения

ID изделия может быть локальным номером внутри заказа, а не глобальным среди всех строк заказов. Так что group by ИЗДЕЛИЕ_ЗАКАЗ.ЗАКАЗ_ID, ИЗДЕЛИЕ_ЗАКАЗ.ID изделия.
5 ноя 17, 22:21    [20929055]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Динара48
Member

Откуда:
Сообщений: 8
Andy_OLAP, спасибо огромное преогромное)
5 ноя 17, 22:59    [20929151]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Динара48,

Так это не мне, а Ранкатану, я лишь уточнил небольшую деталь. Пожалуйста.
5 ноя 17, 23:05    [20929170]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Динара48
Member

Откуда:
Сообщений: 8
Andy_OLAP, подскажите пожалуйста в чем может быть ошибка

есть запрос, который вставляет значение(стоимость заказа) в строку стоимость заказу в таблице заказ, но проблема в том, что он вставляет эти значение в пустые строки, а не в те которые нужно

insert into tab_order(cost_order)
select sum(tab_material.cost_metr_material*tab_material_product_order.count_material * tab_product_order.count_product) + (tab_product.cost_tailoring * tab_product_order.count_product)
from tab_order, tab_product, tab_product_order, tab_material, tab_material_product_order
where tab_order.IDorder = tab_product_order.IDorder and
tab_product_order.IDorder = tab_material_product_order.IDorder and
tab_product.IDproduct = tab_product_order.IDproduct and
tab_product_order.IDproduct = tab_material_product_order.IDproduct and
tab_material.IDmaterial = tab_material_product_order.IDmaterial
group by tab_product_order.IDorder, tab_product_order.IDproduct;

К сообщению приложен файл. Размер - 9Kb
5 ноя 17, 23:34    [20929229]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Динара48
Andy_OLAP, подскажите пожалуйста в чем может быть ошибка

есть запрос, который вставляет значение(стоимость заказа) в строку стоимость заказу в таблице заказ, но проблема в том, что он вставляет эти значение в пустые строки, а не в те которые нужно

insert into tab_order(cost_order)
select sum(tab_material.cost_metr_material*tab_material_product_order.count_material * tab_product_order.count_product) + (tab_product.cost_tailoring * tab_product_order.count_product)
from tab_order, tab_product, tab_product_order, tab_material, tab_material_product_order
where tab_order.IDorder = tab_product_order.IDorder and
tab_product_order.IDorder = tab_material_product_order.IDorder and
tab_product.IDproduct = tab_product_order.IDproduct and
tab_product_order.IDproduct = tab_material_product_order.IDproduct and
tab_material.IDmaterial = tab_material_product_order.IDmaterial
group by tab_product_order.IDorder, tab_product_order.IDproduct;

Вам нужно не новые строки вставлять в tab_order (insert), а обновлять значение в существующих (update).
Поэтому
update t1
set cost_order = sum() + не_просто_произведение, а агрегация
from tab_order as t1
inner join другая_таблица as t2 on t1.IDorder = t2.IDorder и так далее 
5 ноя 17, 23:45    [20929245]     Ответить | Цитировать Сообщить модератору
 Re: Запрос sql  [new]
Динара48
Member

Откуда:
Сообщений: 8
Andy_OLAP, что вы имели в виду "sum() + не_просто_произведение, а агрегация"?
6 ноя 17, 00:06    [20929286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить