SQL连接到很多行

时间:2015-08-24 13:46:25

标签: sql sql-server

我有一个包含大量查询的SQL查询。

但我会尽力使其变得简单

Table.Result

Id
Result

Table.ResultGender

ResultID
GenderID

Table.Gender

Id
Gender

一个结果可能有多个性别。 所以想要这样的结果

Result             |  Gender

Some result        | Female

Another result     | Female, male

但我正在

Result             |  Gender

Some result        | Female

Another result     | male

Another result     | Female

查询:

    SELECT Gender.Name , Result.Result     
    FROM Gender 
LEFT OUTER JOIN ResultGender ON Gender.Id = ResultGender.GenderId  
LEFT OUTER JOIN Result ON ResultGender.ResultId = Result.Id
  

更新

我试过这个

    SELECT Gender.Name , Result.Result  ,
    STUFF((SELECT  ',' + Name
    FROM            Gender
     WHERE        (Id = Gender_1.Id) FOR XML PATH(''))as varchar(max)) AS test
    FROM            Gender AS Gender_1 
LEFT OUTER JOIN ResultGender ON Gender_1.Id = ResultGender.GenderId 
LEFT OUTER JOIN Result ON ResultGender.ResultId = Result.Id

在SQL管理器中使用

    SELECT Gender.Name , Result.Result  ,
    CAST((SELECT  ',' + Name
    FROM            Gender
     WHERE        (Id = Gender_1.Id) FOR XML PATH(''))as varchar(max)) AS test
    FROM            Gender AS Gender_1 
LEFT OUTER JOIN ResultGender ON Gender_1.Id = ResultGender.GenderId 
LEFT OUTER JOIN Result ON ResultGender.ResultId = Result.Id

两人正在尝试保存RPT文件

2 个答案:

答案 0 :(得分:0)

尝试以下内容:

DECLARE @Result VARCHAR(8000) 
SELECT Gender.Name, @Result = COALESCE(@Result + ', ', '') + Result.Result 
FROM Gender 
JOIN Result ON Gender.Id = Result.Id 
JOIN ResultGender ON Gender.Id = ResultGender.GenderId 
     AND StudyResult.Id = ResultGender.ResultId

答案 1 :(得分:0)

您加入不正确。 Gender.Id是性别记录的ID,Result.Id是结果记录的ID。因此Gender.Id = Result.Id毫无意义。 ResultGender是您加入所需的brige表:性别 - > GenderResult - >结果

关于您的实际请求:按Result分组,以便为​​每个结果获取一条记录。获取具有适当功能的性别列表(我在这里使用MySQL的GROUP_CONCAT显示它。)

select 
  r.result     
  group_concat(g.name)
from result r
inner join resultgender rg on rg.resultid = r.id
inner join gender g on g.id = rg.genderid
group by r.result;

不幸的是,SQL Server不提供GROUP_CONCAT这样的功能。它需要对XML PATH和STUFF进行一些摸索。见这里:How to make a query with group_concat in sql server

如果您的结果没有性别,请使用外部联接:

left join resultgender rg on rg.resultid = r.id
left join gender g on g.id = rg.genderid