Назад | Перейти на главную страницу

Количество и сумма запросов MS SQL

select count(distinct consumerno),
sum (case when  ccon like '%D%' then 1 else 0 end) as Domestic,
sum (case when ccon like '%B%' then 1 else 0 end) as Business
from consumer  left join  contract on consumerno = cconsumer
where status = 'Active'

Вывод

total    B        D
35952   35694   1669

Есть две таблицы: потребительская и контрактная.

Здесь я пытаюсь получить общее количество потребителей, которые покупают продукт, начиная с бизнеса или дома. Таблица контрактов имеет повторяющиеся номера потребителей, поскольку они меняются от служебного к домашнему или наоборот. Как видно из приведенного выше запроса, сумма запросов верна, но сумма для домашнего и коммерческого использования неверна. Любой лучший способ добиться этого.

Любые комментарии будут оценены

Я предполагаю, что поле «статус» находится в таблице «контракт». Самый простой способ - создать 3 отдельных запроса, которые, как вы уверены, отражают правильное число для каждой суммы, и избегать объединений там, где они не нужны.

SELECT COUNT(DISTINCT consumerno) as TOTAL FROM consumer LEFT JOIN  contract ON consumerno = cconsumer WHERE status='Active';
SELECT COUNT (DISTINCT cconsumer) as B FROM contract WHERE ccon LIKE '%B%' AND status='Active';
SELECT COUNT (DISTINCT cconsumer) as D FROM contract WHERE ccon LIKE '%D%' AND status='Active';

Вы можете создать объединение в поле заполнителя, чтобы при необходимости поместить их все в одну аккуратную строку.