SQL Server 将共享相同ID代码的项目分组在一起,然后指明该项目是组的一部分

huus2vyu  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(121)

假设我在一个表中有类似于以下内容的项:
| 项目名称|系列代码|
| - -|- -|
| ABR 123型|ABRReact器|
| ABR 456型|ABRReact器|
| BCL 369细胞|BCL语言|
| BCL 987型|BCL语言|
| AEL 877型|机场限制区|
我想根据是否存在具有此相同系列代码的其它物料来标记物料是否为系列的一部分。我想添加一个输出列,如“是否为系列的一部分”,是/否。
输出如下:
| 项目名称|系列代码|是家庭成员吗?|
| - -|- -|- -|
| ABR 123型|ABRReact器|是的|
| ABR 456型|ABRReact器|是的|
| BCL 369细胞|BCL语言|是的|
| BCL 987型|BCL语言|是的|
| AEL 877型|机场限制区|没有|

hi3rlvi2

hi3rlvi21#

您可以使用带有 exists 的半自联接

select Item, FamilyCode, 
  case when exists (
    select * from t t2
    where t2.FamilyCode = t.FamilyCode and t2.Item != t.items
  ) then 'Yes' else 'No' end [Is part of a family]
from t;
x0fgdtte

x0fgdtte2#

我认为这可以通过计算具有相同FamilyCode的行数来实现,如果大于1,则将其标记为家族的一部分。

with cte as (
    select * from (values
        ('ABR123', 'ABR'),
        ('ABR456', 'ABR'),
        ('BCL369', 'BCL'),
        ('BCL987', 'BCL'),
        ('AEL877', 'AEL')
    ) as x([Item], [FamilyCode])
)
select *,
    [IsPartOfFamily] =
        case when count(*) over (partition by [FamilyCode]) > 1 
        then 1
        else 0 end
from cte;

相关问题