按需要分组以避免 SQL 查询中的重复

问题描述 投票:0回答:1

表格结果如下:

姓名 职位 下属 国家 价格
约翰 经理 何塞 50
约翰 经理 拉朱 SR 25
约翰 经理 克里斯 30
约翰 经理 BN 10
约翰 经理 何塞 300
约翰 经理 拉朱 SR 85
约翰 经理 克里斯 450
约翰 经理 BN 100
马修 人力资源管理 阿里 BH 20
马修 人力资源管理 尼图 20
马修 人力资源管理 西娜 20

我需要得到的实际结果如下:

姓名 职位 下属 国家 价格
约翰 经理 何塞、拉朱、克里斯、唐 IN、SR、BN 1050
马修 人力资源管理 ALI,尼图,SEENA BH,印第安纳州 60

我尝试过的查询是

    Select  A.Name as Name, A.Position as   Postion, STRING_AGG(B.Subordinate,',') as Sabordinates ,STRING_AGG(A.Country,',') as Country, SUm(C.Rate) from 
    Emp A 
    left join Sabordinate B on A.ID= B.SabId  
    Left join Cost C  on C.SId=B.SabId
    Group by A.Name,A.Position

但我得到的结果如下,

姓名 职位 下属 国家 价格
约翰 经理 何塞,拉朱,克里斯,唐,何塞,拉朱,克里斯,唐 IN、SR、IN、BN、IN、SR、IN、BN 1050
马修 人力资源管理 ALI,尼图,SEENA BH,印度,印度 60

将下属名称和一个国家重复两次或三次(名称重复次数就是重复次数) 如果重复的话,我只需要一个名字和国家一次

sql sql-server
1个回答
0
投票

您可以使用distinct来获取唯一值

选择 A.Name 作为名称,A.Position 作为职位,STRING_AGG(B.Sublined,',') 作为从属,STRING_AGG(A.Country,',') 作为 Country,SUM(C.Rate) from 雇员A (SELECT DISTINCT SabId,下属 FROM Sabord) AS 下属 ON A.ID = Subscribeds.SabId 左连接 成本 C ON C.SId = 下属.SabId 通过...分组 A.姓名,A.职位;

© www.soinside.com 2019 - 2024. All rights reserved.