我有一个包含大量查询的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文件
答案 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