2015-09-01 3 views
0

Я пытаюсь использовать часы SUM для 2010 года для сотрудников, использующих следующий сценарий. Некоторые сотрудники могут иметь несколько строк в таблице за тот же год. Хотя поле заполняется 0, если нет часов, общий результат может указывать на NULL. Я использую SQL Standard 2005. Предложения будут оценены.SQL - Summing Null Values ​​

SELECT  TOP (100) PERCENT id, year, SUM(ISNULL(Reghours_worked, 0))  AS RegHours, SUM(ISNULL(OThours, 0)) 
    OThours, SUM(RegHours + OThours) AS TotalHours_2010 
FROM   dbo.hours 
WHERE  (year = '2010') 
GROUP BY id, year 
ORDER BY id 

``

Результаты ниже:

id Year RegHours OTHours Total Hours 
658261 2010 1449   0 1449 
752466 2010 1743   0 1743 
144444 2010 1750   0 1750 
652152 2010 1142   0 NULL 
926541 2010 0   0 0 
+0

'Выбор TOP (100) ПРОЦЕНТ ид, год, SUM (IsNull (Reghours_worked, 0)) КАК RegHours, SUM (ISNULL (OThours, 0)) OThours, SUM (ISNULL (RegHours, 0) + ISNULL (OThours, 0)) AS TotalHours_2010 FROM dbo.hours WHERE (year = '2010') GROUP BY id, year Order BY я d' – lad2025

+0

вам не нужно 'sum (reghours + othours)' эти значения УЖЕ сумы, и их значения не будут готовы, пока после сгенерированной строки. просто 'reghours + othous как total_hours' должен делать. –

ответ

1
SELECT TOP (100) PERCENT id, year, SUM(ISNULL(Reghours_worked, 0)) AS RegHours, 
        SUM(ISNULL(OThours, 0)) AS OThours, 
        SUM(ISNULL(Reghours_worked, 0)+ ISNULL(OThours, 0)) AS TotalHours_2010 
FROM dbo.hours 
WHERE (year = '2010') 
GROUP BY id, year 
ORDER BY id 
+0

Совет. Хорошая информация о 'COALESCE' и' ISNULL' находится на сервере SQL Server Pro [здесь] (http://sqlmag.com/t-sql/coalesce-vs-isnull) и в сообщениях MSDN [здесь] (http: /blogs.msdn.com/b/sqltips/archive/2008/06/26/differences-between-isnull-and-coalesce.aspx). – HABO

+0

Спасибо за то, что поделились этой информацией, я определенно проверил бы это. –

+0

Спасибо за ответ. Ответ Ручи поставил вопрос. – WinnieBear