Обобщение результатов запроса

#sql

#sql

Вопрос:

Хочу обобщить информацию из этого запроса.

 SELECT 
    SUM(DISTINCT CASE WHEN BatchNumber < '100' THEN 1 ELSE 0 END) AS A,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '22%' THEN 1 ELSE 0 END) AS B,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '33%' THEN 1 ELSE 0 END) AS C,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '44%' THEN 1 ELSE 0 END) AS D,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '55%' THEN 1 ELSE 0 END) AS E,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '66%' THEN 1 ELSE 0 END) AS F,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '77%' THEN 1 ELSE 0 END) AS G,
    SUM(DISTINCT CASE WHEN BatchNumber LIKE '88%' THEN 1 ELSE 0 END) AS H
FROM 
    Database.dbo.[Transaction]
WHERE 
    EffectiveDateTime = '2012-01-03'
GROUP BY 
    DepositBatchNumber
 

Я получаю это (изображение является частью результатов):

Результаты запроса

Я ищу, чтобы получить это:

Требуемые результаты

Если я использую COUNT (без опции distinct) вместо SUM , я получаю фактическое количество данных в таблице, которые мне не нужны.

 SELECT 
    COUNT(CASE WHEN BatchNumber < '100' THEN 1 END) AS A,
    COUNT(CASE WHEN BatchNumber LIKE '22%' THEN 1 END) AS B,...
 

Счетчик возвращает неверные данные

Заранее спасибо.

Ответ №1:

РЕДАКТИРОВАТЬ: я думаю, что теперь я понял: Вы ищете количество различных депозитных наборов!

 SELECT 
    count(distinct case when BatchNumber < '100' then DepositBatchNumber end) as A,
    count(distinct case when BatchNumber like '22%' then DepositBatchNumber end) as B,
    ...
FROM Database.dbo.[Transaction]
WHERE EffectiveDateTime = '2012-01-03';
 

Комментарии:

1. Спасибо вам за раннее голосование. С тех пор я дважды менял свой ответ. Я надеюсь, что это все еще стоит того, чтобы проголосовать 🙂

2. Я ищу номер отдельного номера пакета. Если я удалю оператор group by, я получу 1, как и ожидалось. Я хочу получить количество партий в A (4), B (2), C (12)… Я вижу цифры за этот конкретный день, которые помогают мне сузить тот факт, что у меня есть данные за 10 лет, которые мне нужно обобщить. Есть ли в этом смысл?

3. Я удалил верхнюю часть своего ответа. Вы пробовали то, что я предлагаю? В этом последнем запросе я удалил GROUP BY , чтобы получить одну результирующую строку, и изменил выражения на count(distinct ... DepositBatchNumber ...) . Это должно дать вам то, что вы хотите. Или, если вы хотите указать distinct BatchNumber вместо distinct DepositBatchNumber, замените их в выражениях.

4. Отлично! это сделало это! Большое вам спасибо!