2013-03-12 2 views
-3

У меня есть эта T-SQL заявление, которое складывает все col1 и col2, но также должен возвращать количество строк, возвращаемых WHEREКак COUNT (*) КОГДА COALESCE - SQL Server

Единственный способ, которым я выяснилось, как это сделать: count(FlightLogLegID - (FlightLogLegID - 1)), что приводит к суммированию 1 за строку. Я надеялся, что будет лучший способ, который не требует ненужного сложения и вычитания.

SELECT 
    coalesce((Select sum(Col1)),0) AS Number1, 
    coalesce((Select sum(Col2)),0) AS Number2, 
    coalesce((Select count(TableRowID - (TableRowID - 1)), 0) AS Number3 
FROM 
    SomeTable 
WHERE ... 

Пример строки

TableRowID Col1 Col2 
1   5  10 
2   3  5 
3   12  8 

желательные результаты

Number1 Number2 Number3 
20  23  3 
+1

Посмотрите на [Групповые группировки] (http://msdn.microsoft.com/en-us/library/bb522495 (v = sql.105) .aspx). – xQbert

+0

можете ли вы разместить образцы записей? ': D' –

+0

Вы спрашиваете о ** MySQL ** (как в своем названии) или ** SQL Server ** (как в ваших тегах)? –

ответ

1

Если это так просто, как ваш пример показывает, только с одной строки возвращается, все, что вам нужно это:

Select SUM(Col1) 
    , SUM(Col2) 
    , Count(*) 
From SomeTable 
Where <whatever> 

Coalesce не будет проблемой: Count (*) будет считать все записи, даже с нулями.

+0

Coalesce поставил бы 0 вместо нуля, если строка имеет нуль для этого число поле. Не может ли сумма() потерпеть неудачу в этом обстоятельстве? – masteroleary

+0

@masteroleary no, SUM игнорирует NULL. Вы попробовали? Или [прочитать документы] (http://msdn.microsoft.com/en-us/library/ms187810 (v = sql.100) .aspx)? –

1

Это то, о чем вы просили?

SELECT SUM(Col1) [Number1], SUM(Col2) [Number2], COUNT(*) [Number3] 
FROM SomeTable 

Вы можете использовать эту SQL Fiddle, чтобы проверить его.