2014-11-27 2 views
0

Я создал этот вид из пары таблиц. Каждый сотрудник может работать во всех магазинах. Каждый счет-фактура может иметь один продукт или более одного. Что я хочу показать, Магазин, работник, общий объем продаж отдельных продуктов, общая сумма транзакции (что означает общий номер счета-фактуры), всего счетов-фактур.
Ниже приведен пример таблицы:Как использовать отдельные в сгруппированном запросе?

CREATE TABLE PerformanceView 
([Store] varchar(6), [Employee] varchar(5), [Product] varchar(8), [ProductPrice] int,[InvoiceNo] int, [InvoiceTotal] int); 

INSERT INTO PerformanceView 
([Store], [Employee], [Product], [ProductPrice], [InvoiceNo], [InvoiceTotal]) 
VALUES 
('Store1', 'Empl1', 'Product1', 577.2, 42152, 676.2), 
('Store1', 'Empl1', 'Product1', 99, 42152, 676.2), 
('Store1', 'Empl1', 'Product2', 20, 41969, 20), 
('Store1', 'Empl1', 'Product2', 25, 41649, 25), 
('Store1', 'Empl2', 'Product2', 300, 43112, 300), 
('Store1', 'Empl2', 'Product2', 450, 42440, 450), 
('Store1', 'Empl2', 'Product3', 226, 41666, 2040.14), 
('Store1', 'Empl2', 'Product3', 282.17, 42232, 1678.5), 
('Store1', 'Empl2', 'Product3', 934.67, 41666, 2040.14), 
('Store1', 'Empl2', 'Product3', 1264.56, 42232, 1678.5), 
('Store1', 'Empl2', 'Product4', 49.81, 41666, 2040.14), 
('Store1', 'Empl2', 'Product4', 683.32, 41666, 2040.14), 
('Store1', 'Empl2', 'Product4', 0, 42232, 1678.5), 
('Store1', 'Empl2', 'Product4', 81.92, 42232, 1678.5), 
('Store1', 'Empl2', 'Product4', 146.34, 41666, 2040.14), 
('Store1', 'Empl2', 'Product4', 49.85, 42232, 1678.5), 
('Store1', 'Empl2', 'Product5', 30, 43110, 30), 
('Store1', 'Empl3', 'Product1', 172.5, 42875, 172.5), 
('Store3', 'Empl4', 'Product2', 51, 42801, 51), 
('Store3', 'Empl4', 'Product2', 51, 42488, 51), 
('Store3', 'Empl4', 'Product2', 80.002, 42463, 80.002), 
('Store3', 'Empl4', 'Product2', 22, 42559, 22), 
('Store3', 'Empl4', 'Product2', 20, 42963, 20), 
('Store3', 'Empl4', 'Product2', 35, 42436, 35), 
('Store3', 'Empl4', 'Product2', 107, 43014, 107), 
('Store3', 'Empl4', 'Product2', 59, 42615, 59), 
('Store3', 'Empl4', 'Product2', 110, 42025, 110), 
('Store3', 'Empl4', 'Product2', 89, 42137, 148), 
('Store3', 'Empl4', 'Product2', 50, 42565, 100), 
('Store3', 'Empl4', 'Product2', 59, 42137, 148), 
('Store3', 'Empl4', 'Product5', 25, 42565, 100), 
('Store3', 'Empl4', 'Product5', 25, 42565, 100), 
('Store3', 'Empl5', 'Product2', 22, 42295, 44), 
('Store3', 'Empl5', 'Product2', 22, 42295, 44), 
('Store3', 'Empl5', 'Product2', 439, 41723, 439), 
('Store3', 'Empl5', 'Product2', 197, 42267, 197), 
('Store3', 'Empl5', 'Product2', 150, 41780, 150), 
('Store3', 'Empl5', 'Product2', 539, 42280, 539), 
('Store3', 'Empl5', 'Product2', 63, 41689, 63), 
('Store3', 'Empl5', 'Product2', 269, 42274, 269), 
('Store3', 'Empl5', 'Product2', 134, 41731, 134), 
('Store2', 'Empl3', 'Product1', 0, 43076, 0), 
('Store2', 'Empl3', 'Product1', 149.49, 42557, 666.73), 
('Store2', 'Empl3', 'Product1', 0, 43076, 0), 
('Store2', 'Empl3', 'Product1', 0, 42917, 0), 
('Store2', 'Empl3', 'Product1', 61.01, 42557, 666.73), 
('Store2', 'Empl3', 'Product1', 389.4, 42557, 666.73), 
('Store2', 'Empl3', 'Product1', 66.84, 42557, 666.73), 
('Store2', 'Empl3', 'Product1', 0, 43076, 0), 
('Store2', 'Empl3', 'Product1', 15.42, 41650, 15.42), 
('Store2', 'Empl3', 'Product1', 0, 43088, 0), 
('Store2', 'Empl3', 'Product1', 0, 42920, 0), 
('Store2', 'Empl3', 'Product6', 0, 43076, 0); 

Я попробовал этот код;

select 
STORE, 
EMPLOYEE, 
PRODUCT, 
SUM(ProductPrice) as ProductTotal , 
SUM(InvoiceTotal) as InvoiceTotal, 
Count(Distinct InvoiceNo) as Transactions 
from 
PerformanceView 
GROUP BY STORE,EMPLOYEE,PRODUCT 

Но счет-фактура Всего не так Из-за этого суммы имеют одинаковые счета-фактуры.
Здесь вы можете проверить его http://sqlfiddle.com/#!3/e419f/6
Я пробовал предложение, но он не дал такого же представления.

+0

Если у него такой же счет-фактура Нет, что бы вы хотели включить в общую сумму? минимальный или максимальный? –

+0

Содержит ли InvoiceTotal каждую строку Total для всего счета-фактуры или является ли это итогом только для этого продукта из счета-фактуры? Например, счет-фактура 42232 появляется несколько раз и имеет тот же InvoiceTotal, но не указывает, сколько продукта было продано для этой линии. У вас должно быть что-то, что вы можете использовать, чтобы узнать, какая часть этого InvoiceTotal принадлежит этому продукту, тогда вы можете подвести итог. – Vinnie

ответ

0

Ваша проблема заключается в том, что ваш взгляд поддерживает продажи одного продукта (одна строка за проданный продукт), но вы также имеют избыточную сумму счета-фактуры с ним. При группировке по магазину, сотруднику и продукту вы рассчитываете количество счетов многократно. Таким образом, вы должны сначала группа по магазину, сотрудник, продукт и InvoiceNo, и только затем приступить к последней группе:

select 
    store, 
    employee, 
    product, 
    sum(producttotal) as producttotal, 
    sum(invoicetotal) as invoicetotal, 
    count(*) as transactions 
from 
(
    select 
    store, 
    employee, 
    product, 
    sum(productprice) as producttotal, 
    min(invoicetotal) as invoicetotal 
    from performanceview 
    group by store, employee, product, invoiceno 
) as pre_aggregate 
group by store, employee, product; 

Вот ваш SQL скрипка: http://sqlfiddle.com/#!3/e419f/32.

+0

Спасибо Это то, что я хочу. – funkoff

0

Глядя на входных данных, я заметил повторяющиеся строки, такие как:

('Store3', 'Empl4', 'Product5', 25, 42565, 100), 
('Store3', 'Empl4', 'Product5', 25, 42565, 100), 
('Store3', 'Empl5', 'Product2', 22, 42295, 44), 
('Store3', 'Empl5', 'Product2', 22, 42295, 44), 

Так что для того, чтобы дезинфицировать это использование инлайн вид этой формы:

select [Store], [Employee], [Product], [ProductPrice], [InvoiceNo], [InvoiceTotal] 
from PerformanceView 
group by [Store], [Employee], [Product], [ProductPrice], [InvoiceNo], [InvoiceTotal] 

Как так:

select 
    pv.STORE, 
    pv.EMPLOYEE, 
    pv.PRODUCT, 
    SUM(pv.ProductPrice) as ProductTotal , 
    SUM(pv.InvoiceTotal) as InvoiceTotal, 
    Count(Distinct pv.InvoiceNo) as Transactions 
from 
(
    select [Store], [Employee], [Product], [ProductPrice], [InvoiceNo], [InvoiceTotal] 
    from PerformanceView 
    group by [Store], [Employee], [Product], [ProductPrice], [InvoiceNo], [InvoiceTotal] 

) pv 
GROUP BY pv.STORE, pv.EMPLOYEE, pv.PRODUCT 
Смежные вопросы