2014-10-08 4 views
1

Я не могу понять этот запрос, и это должно быть легко. Но я в недоумении. Как вы запрашиваете, используя совокупную привязку СУММ по диапазону дат?Выберите агрегат и диапазон дат

Учитывая эту таблицу:

ID EmployeeID PayAmount PayDate 
1 48   289.0000  2003-12-22 00:00:00.000 
2 251  458.0000  2003-12-30 00:00:00.000 
3 48   248.0000  2003-12-30 00:00:00.000 
4 167  255.5000  2003-12-30 00:00:00.000 
5 48   100.00   2004-01-31 00:00:00.000 
6 251  100.00   2004-01-31 00:00:00.000 
7 251  300.00   2004-02-14 00:00:00:000 

Я хотел бы выполнить запрос, чтобы увидеть, сколько каждый работник заработал в течение данного года. Так за 2003 год, результаты хотели бы это:

EmployeeID TotalPaid 
48   537.00 
167   255.50 
251   458.00 

В 2004 году результаты будут:

EmployeeID TotalPaid 
48   100.00 
251   400.00 
+1

которые dbms? это sql-сервер или oracle или mysql – radar

+0

Что мешает вам писать такие запросы самостоятельно? Где вы застряли? –

+0

Сервер Microsoft SQl – TZERO

ответ

1

В Microsoft SQL Server можно сделать так. Группировка данных на основе Года для каждого EmployeeID Данные могут быть отфильтрованы за конкретный год, используя команду HAVING с функцией YEAR. В этом поле приведены данные за 2004 год

SELECT EmployeeID, 
     SUM(PayAmount) as TotalPaid, 
     DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0) as Year 
FROM Table1 
GROUP BY EmployeeID, DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0) 
HAVING YEAR(DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0)) =2004 
+0

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

+0

@TML, вы правы, добавил предложение HAVING, чтобы продемонстрировать часть года. – radar

+0

Да, сэр. Это работает. Я просто добавил ORDER BY EmployeeID, и это именно то, что мне нужно. Спасибо. – TZERO

Смежные вопросы