2017-02-20 11 views
0

Oke, поэтому у меня есть эта вещь. Я хочу знать количество заказов в неделю на сущность. Я начал с этим запросом:Добавление строк в SQL

select 
DATEPART(YEAR, OrderDate) AS 'Year', 
DATEPART(WEEK, OrderDate) AS 'Week', 
COUNT(*) as 'Amount of Orders', 
EntityID 
FROM tblOrder 
WHERE DATEPART(YEAR, tblOrder.OrderDate) = 2015 
GROUP BY EntityID,OrderDate 
ORDER BY Week asc 

Результат хороший, но я получаю двойные строки везде:

Year | Week | Amount of Orders | EntityID 
2015 | 1 |  1   |  1 
2015 | 1 |  1   |  1 
2015 | 1 |  1   |  1 
2015 | 1 |  1   |  1 
2015 | 1 |  1   |  1 
2015 | 1 |  1   | 15 
2015 | 1 |  1   | 15 

Что я хочу достичь, это:

Year | Week | Amount of Orders | EntityID 
2015 | 1 |  5   |  1 
2015 | 1 |  2   |  2 
2015 | 1 |  4   |  3 
2015 | 1 |  9   |  4 

И так далее. Что не так в моем запросе?

+0

Я думаю, что 'GROUP BY EntityID, OrderDate' может быть причиной этого. 'OrderDate', без сомнения, является абсолютно уникальной сущностью, поэтому отдельные строки –

ответ

2

GROUP BY год и неделю вместо OrderDate:

select [Year], [week], EntityID, count(*) 
from 
(
select DATEPART(YEAR, OrderDate) AS 'Year', 
     DATEPART(WEEK, OrderDate) AS 'Week', 
     EntityID 
FROM tblOrder 
WHERE DATEPART(YEAR, tblOrder.OrderDate) = 2015 
) dt 
GROUP BY [Year], [Week], EntityID 
ORDER BY Week asc 

Потому что тот же самый год/неделя может иметь заказы от разных дат. Если вы в день GROUP BY, вы получите несколько строк за этот год/неделю.

+0

Большое вам спасибо! Это полезно! –

0

Просто используйте одно и то же выражение в своей группе по предложению.

select DATEPART(YEAR, OrderDate) AS 'Year', 
     DATEPART(WEEK, OrderDate) AS 'Week', 
     EntityID, 
     COUNT(*) as 'Amount of Orders' 
FROM tblOrder 
WHERE DATEPART(YEAR, tblOrder.OrderDate) = 2015 
GROUP BY DATEPART(YEAR, OrderDate), DATEPART(WEEK, OrderDate), EntityID