2017-12-27 186 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