
[英]How can I count and show the number of times a row appears within multiple joined tables?
[英]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_NUM
的B
和M
,Make_Buy
更改为Both
。 如果CUM_PART_NUM
有N
和Y
为Alternate_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.