суммировать только значения в столбце с ненулевыми значениями в других столбцах таблицы, используя сервер sql - PullRequest
0 голосов
/ 03 февраля 2020

Table Prod

  Product  quantity    Weight 
    A        10          2
    B        20          3
    C        30          0
    D        40          0

select SUM((quantity*weight)) / sum(NULLIF(quantity,0) ) As [Tot Avg]
from prod

Ожидаемый результат:

80/30 = 2.67

Но приведенный выше запрос выдаст

80/100 = 0.8

Как достичь результата 2,67? Я хочу суммировать (количество) с ненулевыми значениями столбца веса.

Ответы [ 3 ]

0 голосов
/ 03 февраля 2020

Я изначально неправильно понял вопрос.

Просто используйте предложение where: Однако я бы упростил его до:

select sum(quantity * weight) * 1.0 / nullif(sum(quantity), 0) As TotAvg
from prod
where weight <> 0;

Здесь - это дБ. <> скрипка.

0 голосов
/ 03 февраля 2020

используйте это:

declare @wq int

set @wq=(select SUM((quantity*weight)) from Product)

declare @quantity int

set @quantity=(select SUM(quantity)from Product where Weight<>0 )

select CAST(@wq AS float)/CAST(@quantity AS float)
0 голосов
/ 03 февраля 2020

Просто сделайте это так

    select SUM((quantity*weight)) / sum(coalesce(1.0*( case when weight > 0 then quantity else 0 end),0)) As [Tot Avg]
from prod

Вывод:

Tot Avg
2.67
...