繁体   English   中英

如果一行出现多次,则聚合该行

[英]Aggregating a row if it appears multiple times

我有一组如下所示的数据:

| Upper_Level_Part_Number | CUM_PART_NUM | Alternate_Part | Make_Buy | Quantity_Needed |
|:-----------------------:|:------------:|:--------------:|:--------:|:---------------:|
|          AAB233         |    IEO333    |        N       |     B    |        1        |
|          AAB233         |    IEO333    |        N       |     M    |        1        |
|          AAB233         |    IEO333    |        Y       |     B    |        1        |
|          AAB233         |    IEO333    |        Y       |     M    |        1        |

我想要做的是创建一个看起来像这样的数据选择:

| Upper_Level_Part_Number | CUM_PART_NUM | Alternate_Part | Make_Buy | Quantity_Needed |
|:-----------------------:|:------------:|:--------------:|:--------:|:---------------:|
|          AAB233         |    IEO332    |        Both    |     Both |        1        |

本质上是模仿下面的逻辑:

如果CUM_PART_NUM同时具有CUM_PART_NUMBMMake_Buy更改为Both 如果CUM_PART_NUMNYAlternate_Part ,将其更改为Both

我试过使用:

SELECT
    CUM_PART_NUM,
    CASE WHEN Make_Buy = 'B' AND Make_Buy = 'M' THEN 'Both' ELSE Make_Buy END AS Make_Buy 

FROM    
    BOM

但是得到:

CUM_PART_NUM    Make_Buy
IEO333  B
IEO333  M
IEO333  B
IEO333  M

我已经设置了一个SQLFIDDLE用于演示。

如果CUM_PART_NUM满足条件,我如何聚合?

像这样的东西:

select Upper_Level_Part_Number, CUM_PART_NUM,
       (case when min(Alternate_Part) = max(Alternate_Part)
             then min(Alternate_Part) else 'Both'
        end) as Alternate_Part,
       (case when min(Make_Buy) = max(Make_Buy)
             then min(Make_Buy) else 'Both'
        end) as Make_Buy,
       Quantity_Needed
from t
group by Upper_Level_Part_Number, CUM_PART_NUM, Quantity_Needed;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM