如何将sql server中不同行的信息合并到1中?

svmlkihl  于 2021-07-27  发布在  Java
关注(0)|答案(3)|浏览(339)

我在sql server中有一个名为[orders]的表:

我还有一张表叫[order\u details]:

如您所见,如果在[orders]表中介质类型不同,则在[order\u details]中会有2个相应的行。
我怎么做下表?

我在尝试管理员建议的方法,甚至在他们关闭我原来的问题之前,但我得到的是以下内容:

我需要这样:

f8rj6qna

f8rj6qna1#

您只需对得到这些结果的查询执行聚合

select [order id]
       ,max(pallets)         as pallets
       ,max([total cartons]) as [total cartons]
       ,max(units)           as units
       ,max(sets)            as sets
       ,max(GOH)             as GOH
       ,max([Loose Cartons]) as [Loose Cartons]
       ,max([Loose Units])   as [Loose Units]
  from (<insert query that got you the results with two records >
       )
group by [order id]
vsaztqbk

vsaztqbk2#

你似乎只需要条件聚合 order_details :

select od.order_id,
       sum(case when od.media_type = 'Loose Cartons' then qty else 0 end) as loose_cartons,
       sum(case when od.media_type = 'Loose Units' then qty else 0 end) as loose_units
from order_details od
group by od.order_id;
tquggr8v

tquggr8v3#

好的,伙计们。
因此,我不得不创建一个单独的表,只有订单号和3列托盘,纸箱和设置。
我必须用“max”而不是“sum”,否则数量会加倍。
所以我用的是:

create view SSDView_2ND_VB as
select 
    a.ORDER_ID 
    ,max(case when b.MEDIATYPE_ID = '1' then b.ORDER_DETAIL_QUANTITY else null end) as [Pallets]
    ,max(case when b.MEDIATYPE_ID = '2' then b.ORDER_DETAIL_QUANTITY else null end) as [Cartons]
    ,max(case when b.MEDIATYPE_ID = '3' then b.ORDER_DETAIL_QUANTITY else null end) as [Sets]
from
    SSDView_1ST_VB as a
        left join ORDER_DETAIL as b 
        on a.ORDER_ID = b.ORDER_ID
group by a.ORDER_ID

ssdview\u 1st\u vb只是另一个只有“variable”媒体类型的视图。
我要感谢大家的帮助,真的很感谢大家^^

相关问题