2017-12-11 15 views
0

구매 수량, 가격 등의 데이터가 포함 된 아래 표가 있습니다. 각 행에 대한 평균 실행 평균 (현재 평균)을 계산해야합니다.SQL 계산 실행 평균

영수증 1에 대한 첫 번째 현재 평균값은 75 단위로 500 단위를 구입했기 때문에 £ 75입니다.

* 선택 : 첫 번째는 (PurchaseQty * IntakeSellingPrice)/IntakeSellingPrice = CurrentAvg

I 수동으로 다음 방법을 사용하여 "£ 79.4858"에 의해 수신이 계산 한이 계산된다 그래서 이전 단위 없었다 ((PurchaseQty * IntakeSellingPrice) + (InventoryBalance *))/뉴 발란스 [CurrentAVG] *

CREATE TABLE [dbo].[X](
[Item No_] [nvarchar](20) NOT NULL, 
[ReceiptNo] [bigint] NULL, 
[Sold] [decimal](38, 20) NULL, 
[InventoryBalance] [decimal](38, 20) NOT NULL, 
[PurchaseQty] [decimal](38, 20) NULL, 
[IntakeSellingPrice] [decimal](38, 20) NULL, 
[NewBalance] [decimal](38, 20) NULL, 
[CurrentAverage] [numeric](2, 2) NOT NULL 
) ON [PRIMARY] 
GO 

INSERT [dbo].[X] ([Item No_], [ReceiptNo], [Sold], [InventoryBalance], [PurchaseQty], [IntakeSellingPrice], [NewBalance], [CurrentAverage]) VALUES (N'2000045', 1, CAST(0.00000000000000000000 AS Decimal(38, 20)), CAST(0.00000000000000000000 AS Decimal(38, 20)), CAST(500.00000000000000000000 AS Decimal(38, 20)), CAST(75.00000000000000000000 AS Decimal(38, 20)), CAST(500.00000000000000000000 AS Decimal(38, 20)), CAST(0.00 AS Numeric(2, 2))) GO 
INSERT [dbo].[X] ([Item No_], [ReceiptNo], [Sold], [InventoryBalance], [PurchaseQty], [IntakeSellingPrice], [NewBalance], [CurrentAverage]) VALUES (N'2000045', 2, CAST(250.00000000000000000000 AS Decimal(38, 20)), CAST(250.00000000000000000000 AS Decimal(38, 20)), CAST(2181.00000000000000000000 AS Decimal(38, 20)), CAST(80.00000000000000000000 AS Decimal(38, 20)), CAST(2431.00000000000000000000 AS Decimal(38, 20)), CAST(0.00 AS Numeric(2, 2))) GO 
INSERT [dbo].[X] ([Item No_], [ReceiptNo], [Sold], [InventoryBalance], [PurchaseQty], [IntakeSellingPrice], [NewBalance], [CurrentAverage]) VALUES (N'2000045', 3, CAST(316.00000000000000000000 AS Decimal(38, 20)), CAST(2115.00000000000000000000 AS Decimal(38, 20)), CAST(10.00000000000000000000 AS Decimal(38, 20)), CAST(80.00000000000000000000 AS Decimal(38, 20)), CAST(2125.00000000000000000000 AS Decimal(38, 20)), CAST(0.00 AS Numeric(2, 2))) 
+0

답은 사용자가 지정하지 않은 데이터베이스 엔진에 따라 다릅니다. –

+0

어떤 dbms입니까? 도움이 필요하면 제대로 태그를 지정하십시오. – Eric

+0

이것은 tsql 2012 SQL 서버용 – user3266033

답변

0

그런 다음 실행 평균에 앞에 오는 모든 다른 행으로 각 행에 가입 할 수는 평균에 의해 그룹화 찾을 전 행. 따라서 두 행이 동일하지 않다는 가정하에이 작업을 수행 할 수 있습니다.

SELECT a.*, AVG(b.CurrentAverage) 
FROM dbo.X a INNER JOIN dbo.X b 
ON a.[Item No_] >= b.[Item No_] --or whatever you are ordering your records by for the running average 
GROUP BY a.[Item No_], ..., a.[CurrentAverage] 
+0

입니다. 여러 항목이 있고 각 항목 내에 여러 수신자가 있다고 가정합니다. 예를 들어 항목 0001에는 4 명의 수신자가 있고 항목 0002에는 7 개의 영수증이 있습니다. 여전히 작동할까요? – user3266033

+0

@ user3266033 어떻게 러닝 평균을 주문 하시겠습니까? 더 구체적으로 답변을 업데이트하겠습니다. – zambonee

+0

itemno와 수신자 번호로 주문됩니다. – user3266033