2016-05-05 3 views
1

Попытка создать общее количество для заказов в SQL Server 2008, аналогично приведенной ниже таблице (Заказ № & Порядок Всего столбцов существует в моей таблице SQL Server), попробовал использовать рекурсивный cte но мои результаты были общими для всех заказов, а не сгруппированы по порядку №. Любые предложения о том, как выполнить общее количество сгруппированных по заказу, нет? БлагодаряКак рассчитать общий итог, сгруппированный по заказу №

--------------------------------------------------------- 
| Order No. | Order Total | Running Total for Order No | 
--------------------------------------------------------- 
|  1  | $10,000  | $10,000     | 
--------------------------------------------------------- 
|  1  | -$5,000  | $5,000     | 
--------------------------------------------------------- 
|  1  | $3,000  | $8,000     | 
--------------------------------------------------------- 
|  2  | $2,500  | $2,500     | 
--------------------------------------------------------- 
|  2  | $5,000  | $7,500     | 
--------------------------------------------------------- 
|  2  | $4,000  | $11,000     | 
--------------------------------------------------------- 
+0

'ВЫБОР OrderNo, SUM (OrderTotal) FROM TableName GROUP BY OrderNo' –

+0

Если у вас есть цены, сохраненные в Затем VARCHAR попробует этот запрос: 'SELECT OrderNo, SUM (CONVERT (INT, REPLACE (REPLACE (OrderTotal, '$', ''), ',', '')))) FROM TableName GROUP BY OrderNo' –

ответ

0

Я хотел бы сделать это с Instead of Insert Trigger. Триггер будет вычитать/добавить из первого значения групп. Очевидно, это должно было быть сделано при создании таблицы, но вы могли бы добавить ее после обновления таблицы. Имейте в виду, для того, чтобы код ниже, чтобы работать, вам нужно будет первичный ключ таблицы Order

CREATE TABLE Orders 
(
      id   INT IDENTITY(0, 1) PRIMARY KEY 
     , orderNo  INT 
     , orderTotal MONEY 
     , runningTotal MONEY 
); 

INSERT INTO Orders 
VALUES 
(1,10000,10000), 
(1,-5000,5000), 
(1,3000,8000), 
(2,2500,2500), 
(2,5000,7500), 
(2,4000,11500); 

GO 

--CREATE TRIGGER 

CREATE TRIGGER trg_RunningTotal ON Orders 
INSTEAD OF INSERT 
AS 
    BEGIN 
     DECLARE @PreviousTotal MONEY = 
       (
       SELECT TOP 1 
        a.runningTotal 
        FROM Orders AS a 
         INNER JOIN INSERTED AS b ON a.orderNo = b.orderNo 
        WHERE a.orderno = b.Orderno 
        ORDER BY a.id DESC 
      ); 
     INSERT INTO Orders 
     SELECT 
      orderno, 
      orderTotal, 
      (@PreviousTotal + orderTotal) AS runningTotal 
      FROM INSERTED; 
    END; 

--Insert new record 

     INSERT INTO orders 
     VALUES 
     (1,1000,NULL); 

--View newly added record 

     SELECT 
      * 
      FROM orders 
      WHERE orderno = 1; 
0

Вам необходимо следующий запрос:

SELECT orderno, 
SUM((CASE WHEN ISNUMERIC(ordertotal)=1 
THEN CONVERT(MONEY,ordertotal) ELSE 0 END) 
) 
AS [Converted to Numeric] 

FROM price group by orderno