2014-01-21 4 views
0

У меня есть следующая входная таблица:Расчета на нескольких строках

Article Store Supplier NetPrice Pieces Sum Inventory Price   Cond 
NL1234 N001 3100000 161,5  2  323 7   123,45   2,47 
NL1234 N001 3100000 161,5  0  0  4   103,8   2,08 
NL1234 N001 3100000 161,5  0  0  23   120,8   1,21 

Мне нужно рассчитать средневзвешенную цену на количество инвентаризационной стоимости. Например, Инвентарь * цена для всех выбранных строк, деленная на общее количество. инвентаря number.Mathematically,

((7 * 123,45) + (4 * 103,8) + (120,8))/(34)

SELECT 
    Article, 
    Store, 
    Supplier, 
    NetPrice, 
    sum(Pieces) as "Pieces", 
    sum(Sum) as "Sum", 
    sum(Inventory) as "Inventory", 
    (Inventory*Price)/sum(Inventory) as "Price", 
    (Inventory*Cond)/sum(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    STORE, 
    SUPPLIER, 
    NetPrice, 
    Article 

Как я могу продлить/изменить мой выбор заявление, чтобы получить следующий вывод:

Article Store Supplier NetPrice Pieces Sum Inventory Price Cond 
NL1234 N001 3100000 161,5  2  323 34   119,35 1,57 
+0

Mysql или SQL-сервер? – Mihai

+0

Ничего, я просто не могу получить логику для этого. Если вы можете мне помочь, я бы очень признателен за ваш –

+1

ваш запрос должен уже произвести этот результат. Какие у вас проблемы? –

ответ

1

вы косяк использование (Inventory * Цена)/сумма (Inventory), потому что вы не группировка по столбцу Inventory. Вы можете использовать такие функции, как sum (Inventory).

SELECT 
    Article, 
    SUM(Pieces) as "Pieces", 
    SUM(Sum) as "Sum", 
    SUM(Inventory) as "Inventory", 
    SUM(Inventory * Price)/SUM(Inventory) as "Price", 
    SUM(Inventory * Cond)/SUM(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    Article 
+0

, можете ли вы привести пример это? Я думаю, ваше предложение верное. Я получаю ту же ошибку –

+0

@SangameshHs Я обновил quey, попробуйте это – Backs

0

Удалите столбцы, в которые вы не собираетесь группироваться, и получите MAX NetPrice.

Тем не менее, он будет работать в MySQL, но не на MSSQL, так как в GROUP BY должен быть Store and Supplier. Если вы удалите эти столбцы из вывода, вы должны заставить его работать и с MSSQL.

SELECT 
    Article, 
    Store, 
    Supplier, 
    MAX(NetPrice), 
    sum(Pieces) as "Pieces", 
    sum(Sum) as "Sum", 
    sum(Inventory) as "Inventory", 
    (Inventory*Price)/sum(Inventory) as "Price", 
    (Inventory*Cond)/sum(Inventory) as "Cond" 
FROM 
    table_name 
WHERE 
    "Article" = 'NL1234' 
GROUP BY 
    Article 
1

переместить строку итоговые суммы в CROSS APPLY, а затем использовать результат, что в запросе следующим образом:

SELECT Article, 
     Store, 
     Supplier, 
     MAX(NetPrice), 
     sum(Pieces) as "Pieces", 
     sum(Sum) as "Sum", 
     sum(Inventory) as "Inventory", 
     T.TotalInvCost/sum(Inventory) as "Price", 
     T.TotalInvCond/sum(Inventory) as "Cond" 
FROM table_name 
CROSS APPLY (
SELECT SUM(Inventory*Price) AS 'TotalInvCost' 
,SUM(Inventory*Cond) AS 'TotalInvCond' 
FROM table_name 
WHERE Article = 'NL1234' 
) T 
WHERE 
Article = 'NL1234' 
GROUP BY 
STORE, 
SUPPLIER, 
Article 
Смежные вопросы