2015-01-19 2 views
-1

История вопроса:Сумма подзапроса?

Мы делаем корректировку цен в нашей базе данных. Корректировка цен основана на спецификации материалов, а также на каждой новой стоимости материалов. Поэтому я должен выбрать элемент из таблицы элементов, его спецификации и новой ценовой таблицы и скорректировать цену в зависимости от общего количества материалов, необходимых для создания каждого элемента. Элементы состоят из варьирования количества различных материалов, поэтому мастер запрос будет вызывать этот подзапрос, чтобы получить полную настройку:

select 
ta.Code, 
ta.Quantity, 
(select tb.cost - tb.NewCost * ta.Quantity) as BOMEffect 

from BOM TA 
inner join ITEM TC on tC.ItemCode = tA.Father 
inner join NewPriceTable TB on tA.Code = tB.Item 


where TA.Father = '100-01' 
and tc.PriceList = 3 
order by ta.Father 

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

Code Quantity BOMEffect 
D .003 56.000000 -95.08 
D .004 28.000000 -62 
D .005 20.000000 -54.6 
d .006 2.000000 -3.3 
D .01 2.000000 -5.5 
D .015 4.000000 -25.52 
D .02 4.000000 -34 

Все, что мне нужно от этого запроса - это общее значение BOMEffect (-280). Но если я просто заменить отборное заявление с:

select 
sum((select tb.cost - tb.NewCost * ta.Quantity)) as BOMEffect 

from BOM TA 
inner join ITEM TC on tC.ItemCode = tA.Father 
inner join NewPriceTable TB on tA.Code = tB.Item 


where TA.Father = '100-01' 
and tc.PriceList = 3 
order by ta.Father 

я получаю:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery. 

Я знаю, что это говорит, но я не знаю никакого другого способа сделать это. Как еще я могу получить эту сумму? Это небольшой подзапрос, который является частью более крупного запроса, поэтому мне нужно вернуть всего. Я мог бы, вероятно, использовать точку зрения или временную таблицу, но я хотел бы избегать этого, если это возможно.

+2

Вы должны просто нужно удалите внутренний 'select', чтобы он стал' select sum (tb.cost - tb.NewCost * ta.Quantity) как BOMEffect из спецификации ... ' – Rhumborl

ответ

1

удалить выберите в сумме и order by

select 
sum(tb.cost - tb.NewCost * ta.Quantity) as BOMEffect 
from BOM TA 
inner join ITEM TC on tC.ItemCode = tA.Father 
inner join NewPriceTable TB on tA.Code = tB.Item 
where TA.Father = '100-01' 
and tc.PriceList = 3 
0

Если вы хотите включить код и количество вы должны включать в себя те, в предложения GROUP BY:

select 
ta.Code, 
ta.Quantity, 
sum(tb.cost - tb.NewCost * ta.Quantity) as BOMEffect 
from BOM TA 
inner join ITEM TC on tC.ItemCode = tA.Father 
inner join NewPriceTable TB on tA.Code = tB.Item 
where TA.Father = '100-01' 
and tc.PriceList = 3 
GROUP BY ta.Code, ta.Quantity 
Смежные вопросы