SQL - подсчет отклонений в столбце - PullRequest
0 голосов
/ 04 мая 2018

У меня есть небольшая дилемма.

В моей базе данных есть номера ящиков, которые содержат

«13NR0123-0001, 13NR0123-0002….»

и другие номера ящиков, которые не имеют.

«13NR0456»

причина для

-0001, -0002

состоит в том, что в этих коробках есть сабвуферы, а у других нет сабов.

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

Ниже приведен отчет для подпунктов

select distinct substring(FD_E77BE253,1,len(FD_E77BE253) - 5) as BoxNumber,
count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 like '%-%'
group by FD_E77BE253 

ниже не для вложенных ящиков

select distinct (FD_E77BE253) as BoxNumber,
count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 not like '%-%'
group by FD_E77BE253 

Сценарий без подпрограмм работает нормально, но сценарий с подпунктами не дает мне точных цифр.

В любом случае, я могу объединить оба?

Ожидаемый результат должен выглядеть следующим образом enter image description here

Заранее благодарю.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Просто добавьте '-' и используйте один запрос для подсчета:

select LEFT(FD_E77BE253 + '-', CHARINDEX('-', FD_E77BE253 + '-') - 1) as BoxNumber,
    count(FD_84A4EF1A) As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
group by FD_E77BE253 
0 голосов
/ 04 мая 2018

Причина, по которой ваш первый запрос не работает, заключается в том, что вы группируете по FD_E77BE253, но поле вашего выбора является подстрокой целого, поэтому в основном вы группируете по некоторым другим данным и проецируете часть порции. Это. счет принадлежит всему, а не подстроке, вот почему.

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

это выглядит примерно так:

;with cte1 as (
select substring(FD_E77BE253,1,len(FD_E77BE253) - 5) as BoxNumber, FD_84A4EF1A As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 like '%-%'
),
cte2 as (
select distinct (FD_E77BE253) as BoxNumber, FD_84A4EF1A As Document_Count
from FD_Documents
where deleted = '0'
and FD_9DAADEC8 is not null
and FD_E77BE253 not like '%-%'
)

    select distinct cte1.BoxNumber, count(cte1.Document_Count)
    from cte1
    group by BoxNumber
union 
    select distinct cte2.BoxNumber, count(cte2.Document_Count)
    from cte2
    group by BoxNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...