2015-08-04 3 views
3

Я задерживаю решение проблемы поиска ежедневной прибыли из таблицы db (ms access). Разница между другими советами, которые я нашел в Интернете, заключается в том, что в таблице нет поля «Цена» и «Стоимость», но поле «Тип», которое отличает, является ли это выручкой «S» или стоимостью «C "Как получить ежедневную прибыль от таблицы sql

это таблица„Запись“

| Date | Price | Quantity | Type | 
----------------------------------- 
|01/02 | 20 | 2  | C | 
|01/02 | 10 | 1  | S | 
|01/02 | 3  | 10  | S | 
|01/02 | 5  | 2  | C | 
|03/04 | 12 | 3  | C | 
|03/03 | 200 | 1  | S | 
|03/03 | 120 | 2  | C | 

до сих пор я пробовал разные решения, такие как:

SELECT 
    (SELECT SUM (RS.Price* RS.Quantity) 
    FROM Record RS WHERE RS.Type='S' GROUP BY RS.Data 
    ) as totalSales, 
    (SELECT SUM (RC.Price*RC.Quantity) 
    FROM Record RC WHERE RC.Type='C' GROUP BY RC.Date 
    ) as totalLosses, 
    ROUND(totalSales-totaleLosses,2) as NetTotal, 
    R.Date 
FROM RECORD R"; 

на мой взгляд, она могла бы работать, но, очевидно, это не

и

SELECT RC.Data, ROUND(SUM (RC.Price*RC.QuantitY),2) as DailyLoss 
INTO #DailyLosses 
FROM Record RC 
WHERE RC.Type='C' GROUP BY RC.Date 

SELECT RS.Date, ROUND(SUM (RS.Price*RS.Quantity),2) as DailyRevenue 
INTO #DailyRevenues 
FROM Record RS 
WHERE RS.Type='S'GROUP BY RS.Date 

SELECT Date, DailyRevenue - DailyLoss as DailyProfit 
FROM #DailyLosses dlos, #DailyRevenues drev 
WHERE dlos.Date = drev.Date"; 

Моя проблема за правильный синтаксис является подход к такого рода проблемы

ответ

1

Вы можете использовать группировку и условное суммирование. Попробуйте это:

SELECT data.Date, data.Income - data.Cost as Profit 
FROM (
    SELECT Record.Date as Date, 
     SUM(IIF(Record.Type = 'S', Record.Price * Record.Quantity, 0)) as Income, 
     SUM(IIF(Record.Type = 'C', Record.Price * Record.Quantity, 0)) as Cost, 
    FROM Record 
    GROUP BY Record.Date 
) data 

В этом случае необходимо сначала создать подзапрос, чтобы получить отдельные поля для доходов и затрат, а затем ваш внешний запрос использует вычитание, чтобы получить фактическую прибыль.

Смежные вопросы