2015-08-24 3 views
0

Мне нужна сумма сотрудников. Деньги сделаны, но сгруппированы в месяцы между двумя датами, однако у меня есть поле даты и вы хотите, чтобы название месяца и года было как два отдельных поля.SQL Grouping by Month по полям дат

Этот запрос показывает негруппированную информацию - минус год и месяц в требуемых форматах.

После того, как у меня есть деньги Сотрудники сделали за этот месяц мне нужно сортировать по имени (уже сделано) и Месяц года в рамках каждого сотрудника

SELECT Employee.Name  
, Employee.ID  
, Sales.Date   
, Sales.Money    
FROM Database.Sales.Sales  
INNER JOIN Database.Employee.Employee   
ON Sales.ID=Employee.ID   
WHERE Sales.Date BETWEEN '2000-01-01' AND '2001-01-01'    
ORDER BY Employee.Name 

Благодарности

+0

Я должен добавьте Мне нужно ИМЯ месяца не как interger – HolyUnicow

ответ

0

Вот запрос:

SELECT Employee.Name  
, Employee.ID  
, Sum(Sales.Money) 
, Year(Sales.Date)   
, Month(Sales.Date) 
FROM Database.Sales.Sales  
INNER JOIN Database.Employee.Employee   
ON Sales.ID=Employee.ID   
WHERE Sales.Date BETWEEN '2000-01-01' AND '2001-01-01'    
group by 
    Employee.Name  
    , Employee.ID 
    , Year(Sales.Date)   
    , Month(Sales.Date) 
ORDER BY Employee.Name, Year(Sales.Date), Month(Sales.Date) 
+0

Исходный Sales.Date будет потерян из-за группировки по году и месяцу. – Ray

+0

. Верно, я удалил его. –

+0

Кроме того, как отмечено в сообщении anothe persons, вы получите более высокую производительность, так как функции преобразования даты приводят к выбору полей, а затем группируют по этим псевдонимам и вызывают функции даты дважды для каждого поля. (или три раза, как в случае вашего заказа) – Ray

0

Существует а Month() и Year функции вы можете использовать и группировать их. Incorperate что-то вроде этого в вашем запросе:

SELECT Employee.Name, 
     Employee.ID, 
     MONTH(Sales.Date) as `month`, 
     YEAR(Sales.Date) as `year`, 
     SUM(Sales.Money)  
FROM Database.Sales.Sales   
    INNER JOIN Database.Employee.Employee ON Sales.ID=Employee.ID   
WHERE Sales.Date BETWEEN '2000-01-01' AND '2001-01-01' 
    GROUP by Employee.Name , Employee.ID, `month` , `year`   
ORDER BY Employee.Name 
0

Попробуйте этот способ

SELECT Employee.Name  
, Employee.ID  
, Datepart(year,sales.Date),Datepart(month,sales.Date)   
, sum(Sales.Money) 
FROM Database.Sales.Sales  
INNER JOIN Database.Employee.Employee   
ON Sales.ID=Employee.ID   
WHERE Sales.Date BETWEEN '2000-01-01' AND '2001-01-01' 
Group by Datepart(year,sales.Date),Datepart(month,sales.Date),Employee.Name,Employee.id   
ORDER BY Employee.Name 
+0

Вы получите более высокую производительность, используя функции Date, в списке выбора, а затем группируйте их по сравнению с одновременным вызовом функций даты для каждого поля. – Ray

0

Дата Раскол в 2 Felds

SELECT Employee.Name  
    , Employee.ID  
    , YEAR(Sales.Date) as sales_year 
    , MONTH(Sales.Date) as sales_month 
    , Sales.Money    
    FROM Database.Sales.Sales  
    INNER JOIN Database.Employee.Employee   
    ON Sales.ID=Employee.ID   
    WHERE Sales.Date BETWEEN '2000-01-01' AND '2001-01-01'    
    ORDER BY Employee.Name