Я использую SQL Server 2005. С запросом ниже (упрощенный от моего реального запроса):
select a,count(distinct b),sum(a) from
(select 1 a,1 b union all
select 2,2 union all
select 2,null union all
select 3,3 union all
select 3,null union all
select 3,null) a
group by a
Есть ли способ сделать подсчет отличным, не получая
"Предупреждение: нулевое значение устраняется с помощью агрегата или другой операции SET."
Вот альтернативы, которые я могу придумать:
- Отключение ANSI_WARNINGS
Разделение на два запроса, один с различным числом и предложение where для исключения нулей, один с суммой:
select t1.a, t1.countdistinctb, t2.suma from
(
select a,count(distinct b) countdistinctb from
(
select 1 a,1 b union all
select 2,2 union all
select 2,null union all
select 3,3 union all
select 3,null union all
select 3,null
) a
where a.b is not null
group by a
) t1
left join
(
select a,sum(a) suma from
(
select 1 a,1 b union all
select 2,2 union all
select 2,null union all
select 3,3 union all
select 3,null union all
select 3,null
) a
group by a
) t2 on t1.a=t2.a
Игнорировать предупреждение в клиенте
Есть ли лучший способ сделать это? Я, вероятно, пойду по пути 2, но мне не нравится дублирование кода.