---
title: "Beräkna försäljningsstatistik"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/166183-beräkna-försäljningsstatistik"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Dino"
published: "2007-11-07T11:18:17.000Z"
updated: "2007-11-07T18:26:52.000Z"
replies: 4
views: 543
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/166183-beräkna-försäljningsstatistik"
---

# Beräkna försäljningsstatistik

## #1 — Dino, 2007-11-07T11:18Z

Sql Server 2005

Skulle behöva lite försäljningsstatistik från nedan tabeller.

1\. Antal sålda för en viss produkt **per dag** mellan två datum.
2\. Antal sålda för en viss produkt **per månad** mellan två datum.
3\. Antal sålda för en viss produkt **per år** mellan två datum.

Antal = \[Orderitem.Quantity\]
Produkt = \[Orderitem.ProductId = @productid\]
Order status = \[Order.Status = 600\]
Mellan datum = \[Order.CreateDate BETWEEN @date1 AND @date2\]

Exempel:
2004 - 101
2005 - 54
2006 - 0
2007 - 133

Om det då inte finns något för ett visst år/månad/dag så skall värdet vara 0.

```
CREATE TABLE [Order] (
	[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
	[Status] [int] NOT NULL ,
	[CreateDate] [smalldatetime] NOT NULL ,
	CONSTRAINT [PK_Order] PRIMARY KEY  CLUSTERED 
	(
		[Id]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

CREATE TABLE [OrderItem] (
	[Id] [int] IDENTITY (1, 1) NOT FOR REPLICATION  NOT NULL ,
	[OrderId] [int] NOT NULL ,
	[ProductId] [int] NOT NULL ,
	[Quantity] [int] NOT NULL ,
	[RowTotal] [money] NOT NULL ,
	CONSTRAINT [PK_OrderItem] PRIMARY KEY  CLUSTERED 
	(
		[Id]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO
```

Permalänk: https://www.webforum.nu/p/166183

## #2 — Dino, 2007-11-07T18:07Z

Ok, har nu skapat en Kalender tabell.

```
CREATE TABLE dbo.Calendar  
(  
    dt SMALLDATETIME NOT NULL 
        PRIMARY KEY CLUSTERED
) 
GO
```

Och fyllt den med några datum.

```
SET NOCOUNT ON 
DECLARE @dt SMALLDATETIME 
SET @dt = '20070101' 
WHILE @dt < '20270101' 
BEGIN 
    INSERT dbo.Calendar(dt) SELECT @dt 
    SET @dt = @dt + 1 
END
```

Och kan med förljande kod ta ut per dag.

```
SELECT	c.dt as [Date], COALESCE(SUM(oi.Quantity),0) as Quantity
FROM	dbo.Calendar as c LEFT OUTER JOIN 
		dbo.[Order] as o ON o.CreateDate >= c.dt
		AND o.CreateDate < dateadd(day,1,c.dt) INNER JOIN 
			dbo.[OrderItem] as oi ON o.Id = oi.OrderId
WHERE	(oi.ProductId = @productid) AND c.dt BETWEEN @startdate AND @enddate
GROUP BY c.dt
ORDER BY c.dt;
```

Men skulle behöva hjälp med att ta ut per månad och per år.

Permalänk: https://www.webforum.nu/p/2047011

## #3 — LarsG, 2007-11-07T18:12Z

Per månad

```
SELECT	year(c.dt), month(c.dt), COALESCE(SUM(oi.Quantity),0) as Quantity
FROM	dbo.Calendar as c LEFT OUTER JOIN 
		dbo.[Order] as o ON o.CreateDate >= c.dt
		AND o.CreateDate < dateadd(day,1,c.dt) INNER JOIN 
			dbo.[OrderItem] as oi ON o.Id = oi.OrderId
WHERE	(oi.ProductId = @productid) AND c.dt BETWEEN @startdate AND @enddate
GROUP BY year(c.dt), month(c.dt)
ORDER BY year(c.dt), month(c.dt)
```

Permalänk: https://www.webforum.nu/p/2047013

## #4 — Dino, 2007-11-07T18:18Z

Och utan month() för per år då.

Men är det möjligt att sätta per månad till bara två kolumner. 
Typ:
2007-10 \| 22
2007-11 \| 4

Permalänk: https://www.webforum.nu/p/2047014

## #5 — Dino, 2007-11-07T18:26Z

Ok, lyckades få ihop det med.

```
SELECT (cast(year(c.dt) as varchar(4)) + '-' + cast(month(c.dt)as varchar(2))), COALESCE(SUM(oi.Quantity),0) as Quantity
```

Tackar för hjälpen.

Permalänk: https://www.webforum.nu/p/2047015

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/166183-beräkna-försäljningsstatistik
