SQL выберите строку с максимальным или отдельным значением и суммируйте все - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть следующие данные, которые мне возвращают. Мне нужно получить определенную или максимальную сумму всей комиссии по налогу за один repnbr. Столбец qtrlycommrep - это значение, к которому я пытаюсь добраться, но не могу. Для repnbr c590 мне нужно получить сумму комиссии 854,66, которая является максимальной для каждого таксона.

Что я делаю не так?

Любая помощь будет высоко ценится!

enter image description here

Вот что я пробовал до сих пор. Использование Row_number

select distinct 
        sub.Repnbr
    ,   (sub.QtrLYComm) as qtrlycommrep
   from ( 
        select distinct repnbr, QtrLYComm
        , rn = row_number() over(partition by repnbr order by QtrLYComm desc)

    from #qtrly
    ) sub
    where sub.rn = 1

Перекрестное применение

 select distinct
        #qtrly.repnbr
    ,   x.QtrLYComm as qtrlycommrep

    from #qtrly
        cross apply (
            select top 1
                *
            from #qtrly as i
            where i.repnbr = Repnbr
            order by i.qtrlycomm desc
            ) as x;

внутреннее соединение

select
    #qtrly.repnbr, #qtrly.qtrlycomm as qtrlycommrep

 from #qtrly 
    inner join (
    select maxvalue = max(qtrlycomm), repnbr
    from #qtrly
    group by repnbr
    ) as m
    on #qtrly.repnbr = m.repnbr 
    and #qtrly.qtrlycomm = m.maxvalue;

упорядочение по row_number

  select top 1 with ties
        #qtrly.repnbr, #qtrly.qtrlycomm as qtrlycommrep

    from #qtrly 
        order by 
            row_number() over(partition by repnbr 
            order by qtrlycomm desc)

1 Ответ

1 голос
/ 15 апреля 2020

Вы хотите одно значение для налогового идентификатора. Вы должны включить это. Например:

select q.Repnbr, sum(q.QtrLYComm) as qtrlycommrep
from (select q.*,
             row_number() over(partition by repnbr, taxid order by QtrLYComm desc) as seqnum
      from #qtrly q
     ) q
where seqnum = 1
group by q.Repnbr;

Однако я был бы склонен использовать два уровня агрегации:

select q.Repnbr, sum(q.QtrLYComm) as qtrlycommrep
from (select distinct repnbr, taxid, QtrLYComm
      from #qtrly q
     ) q
group by q.Repnbr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...