2017-12-27 75 views
0

我在名为claim.files的一个表中有两列,第一列被命名为'claim'并且包含声明文件编号ex。 4355,6444,7674等,第二个被命名为“合作伙伴”,并包含ex的合作伙伴代码。 8393,4783,38283. 索赔文件号码是唯一的,但每个索赔文件可以有更多的合作伙伴,所以我想要运行一个可以将每个索赔文件的所有合作伙伴分组的选择。如果我运行这个“选择声明,声称来自claim.files的合作伙伴(4355,6444,7674)声明中的声明,合作伙伴”,如果它拥有更多合作伙伴,它将复制声明。来自一列的组伙伴

我想要的结果是象下面这样:

claim partners 
4355 57878, 45874, 58977 

如果我运行下面的代码会重复索赔数

select claim, partner from claim.files where claim in (4355, 6444, 7674) group by claim, partner 

这样做的结果会如何,如果我运行上面的选择

claim partners 
    4355 57878 
    4355 45874 
    4355 58977 
+0

请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very- simple-sql-query – Strawberry

+0

请发布正确的sql语句。这个snr是什么?通过仅与像sum()或average() – mbieren

+1

等函数一起工作的群组,请解释如何索赔可以有更多的合作伙伴,如果它们是独特的,并且snr在图片中的位置。 – isaace

回答

1

如果要选择为每个claim分隔的伙伴逗号,y您可以同时使用group_concat

select claim, group_concat(partner separator ',') as partners 
from files 
where snr in (4355, 6444, 7674) 
group by claim; 

Demo

| claim |   partners | 
|-------|-------------------| 
| 4355 | 57878,45874,58977 | 

更新时间:如果您使用的是SQL服务器,你可以这样做,而不是:

SELECT 
    f1.claim, 
    STUFF((
      SELECT ',' + CAST(f2.partner AS NVARCHAR(50)) 
      FROM files as f2 
      where snr in (4355, 6444, 7674) 
      and f1.claim = f2.claim 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS partners 
FROM files as f1 
where snr in (4355, 6444, 7674) 
group by f1.claim; 

- SQL Server demo

| claim |   partners | 
|-------|-------------------| 
| 4355 | 57878,45874,58977 | 
+0

它不工作,我有一个SQL客户端 – haxx

+1

@haxx你是什么意思的SQL客户端?它如何不起作用?没有提供预期的结果?或者你有错误? – 2017-12-27 14:51:26

+0

我得到的错误:错误:[SQL0204]找不到* LIBL类型* N中的GROUP_CONCAT。 SQLState:42704 ErrorCode:-204 – haxx