#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. Отлично! это сделало это! Большое вам спасибо!