Как вернуть 1 строку вместо 3, если в одном столбце разные данные - PullRequest
0 голосов
/ 14 июля 2020

У меня есть 3 строки данных, возвращенных из запроса

OrderId | OtherId
--------+---------
  1234  |  444
  1234  |  555
  1234  |  666

Как вернуть данные в этом формате

OrderId | OtherId | OtherId2 | OtherId
--------+---------+----------+--------
  1234  |   444   |   555    |   666

Могу ли я использовать Distinct для этой проблемы?

EDIT

Набор результатов получается из запроса, такого как

left join   (
                    Select  distinct 
                                o.id
                                ,OL2.db
                                ,case
                                    when i.cust = 'cust2' then 
                                        case
                                            when
                                                lower(pdf.dept) not like 'abc%' or pdf.dept is null
                                                    then 'Yes'
                                            else'No'
                                        end
                                    else 'Yes'
                                end                                                                         as  'Show'
                                ,otherId
                                
      

                    from        order       o       with(nolock)
                    Join        instance    i       with(nolock)    on  i.id                                    =   o.id
                    Join        orderLine   ol      with(nolock)    on  ol.id                                   =   o.SocialNetworker_Order_InstanceId
                                                                    and ol.id   =   o.id
                    join        product     p       with(nolock)    on  o.id        =   p.id
                                                                    and ol.id                                   =   p.id
                    left join   productEx   pdf     with(nolock)    on  p.id                                    =   pdf.id
                                                                    and o.id                                    =   pdf.id
                    Where i.cust    in ('cust1') 
                ) ol2   on  OL2.id =    sno.id
                        and OL2.id2 =   sno.id2
                        and i.db    =   cc.db

Как включить решение в приведенный выше код?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Можно использовать row_number() и условное агрегирование:

select orderid,
       max(case when seqnum = 1 then otherid end) as otherid_1,
       max(case when seqnum = 2 then otherid end) as otherid_2,
       max(case when seqnum = 3 then otherid end) as otherid_3
from (select t.*, row_number() over (partition by orderid order by otherid) as seqnum
      from t
     ) t
group by orderid;
0 голосов
/ 14 июля 2020

Используйте внешнее соединение с условиями каскадного соединения:

select t1.OrderId, t1.OtherId OtherId1, t2.OtherId OtherId2, t3.OtherId OtherId3
from orders t1
left join orders t2 on t2.OrderId = t1.OrderId
  and t2.OtherId > t1.OtherId
left join orders t3 on t3.OrderId = t2.OrderId
  and t3.OtherId > t2.OtherId

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

Этот запрос будет работать с практически любая база данных.

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