Как включить количество значений NULL во временную таблицу без изменения данных NULL на 0? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть таблица с этими значениями

create table LoanExample (
        LoanId int,
        ConstraintId int,
        BorrowerName varchar(128));

    insert into LoanExample values (1, null, 'Jack')
    insert into LoanExample values (1, 33, 'July')
    insert into LoanExample values (2, 78, 'Mike')
    insert into LoanExample values (2, 72, 'Wayne')
    insert into LoanExample values (3, null, 'David')
    insert into LoanExample values (3, 79, 'Chris')
    insert into LoanExample values (4, null, 'Finn')
    insert into LoanExample values (4, null, 'James')

Я хочу подсчитать ограничения каждого LoanId, даже если его значение равно null, и добавить его во временную таблицу.

Я попробовал это

    select 
        LoanId,
        Constraints_Count = count(ConstraintId)
    into #Test
    from LoanExample
    group by LoanId

Но этот запрос игнорирует все нулевые значения в функции подсчета и выдает мне предупреждающее сообщение «Предупреждение: нулевое значение устраняется агрегатом или другой операцией SET».!

Я ожидал, что Constraints_Count каждого LoanId будет равен 2, но для LoanId, у которого значение ConstraintId равно нулю, будет уменьшенное значение в Constraints_Count.

Итак, дляLoanId 1 и 3 я получаю Constraints_Count как «1», но я ожидаю «2», а для LoanId 4 я получаю Constraints_Count как «0», но я ожидаю «2».

Я полагаю, что могуиспользуйте ROW_NUMBER(), но я не совсем уверен, как.

Ответы [ 5 ]

3 голосов
/ 02 апреля 2019

просто используйте количество (*) или сумму (1):

select 
    LoanId,
    Constraints_Count = count(*)
into #Test
from LoanExample
group by LoanId

или

select 
    LoanId,
    Constraints_Count = sum(1)
into #Test
from LoanExample
group by LoanId
1 голос
/ 02 апреля 2019

В зависимости от вашей СУБД, вы можете преобразовать ноль в 0.

SQL Server:

select 
        LoanId,
        Constraints_Count = count(isnull(ConstraintId,0))
    into #Test
    from LoanExample
    group by LoanId

Oracle:

select 
        LoanId,
        Constraints_Count = count(nvl(ConstraintId,0))
    into #Test
    from LoanExample
    group by LoanId

Другое:

select 
        LoanId,
        Constraints_Count = count(case when ConstraintId is null then 0 else ConstraintId end))
    into #Test
    from LoanExample
    group by LoanId
0 голосов
/ 02 апреля 2019

попробуйте, как показано ниже, используя случай, когда

    select 
    LoanId,
    Constraints_Count = sum(case when ConstraintId is null then 1 else 1 end)
into #Test
from LoanExample
group by LoanId
0 голосов
/ 02 апреля 2019

count () работает с нулевым значением, поэтому вы можете попробовать использовать регистр для инвертирования нулевых значений

select 
    LoanId,
    count(case when ConstraintId is null then 1 else null)  Constraints_Count
from LoanExample
group by LoanId
0 голосов
/ 02 апреля 2019

Вместо этого используйте coalesce(), который преобразует нулевые значения в действительное целочисленное значение:

Constraints_Count = count(coalesce(ConstraintId,1))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...