tsql - 带有联合的 TSQL 东西
问题描述
编辑
对不起,我没有很好地解释自己。
我使用 UNION 的原因是从数据库中的表单中提取这些数据。该表格由多个不同的问题和答案组成,因此取决于问题 - 我需要加入相同的表格,但使用不同的链接。
所以下面是一个更好的例子
select ra.AgreementId, sub.Name
from RentAgreement ra
left join
(
--Dogs
Select AA.Reference, AA.ApplicationId,AA.ContactGroupId,e.AgreementId, CONCAT(u.Description,' (Dog)') 'Name'
from AllocationApplication aa
inner join ContactGroupLink l on l.ContactGroupId = aa.ContactGroupId and l.EffectiveToDate is null
inner join RentAgreementEpisode e on e.AgreementEpisodeId = l.LinkId and l.LinkTypeId = 2
inner join SystemFormResponse sfr on sfr.FormId = aa.ApplicationId AND sfr.FormTemplateId = 5 /*(systemformtype 5 = Pet Register)*/
inner join SystemFormPage p on p.FormTemplateId = sfr.FormTemplateId AND p.FormPageId = 6 /*(Pet Register Page)*/
inner join SystemFormSection s on s.FormPageId = p.FormPageId AND s.FormSectionId = 6 /*Pet Details */
Inner join SystemFormGroup g ON g.FormSectionId = s.FormSectionId and FormGroupId in (16)
inner join SystemFormQuestion q on q.FormGroupId = g.FormGroupId and q.EffectiveToDate is null and q.FormQuestionId in (119) /*DogBreed*/
inner join SystemFormQuestionSetup qs on qs.FormQuestionSetupId = q.FormQuestionSetupId
inner join SystemFormResponseAnswer a on a.FormQuestionId = q.FormQuestionId and a.FormResponseId = sfr.FormResponseId
inner join SystemFormResponseDetail d on d.FormResponseAnswerId = a.FormResponseAnswerId
where aa.ApplicationTypeId = 1
union all
--Cats
Select AA.Reference, AA.ApplicationId,AA.ContactGroupId,e.AgreementId, CONCAT(d.TextResponse,' (Cat)') 'Name'
from AllocationApplication aa
inner join ContactGroupLink l on l.ContactGroupId = aa.ContactGroupId and l.EffectiveToDate is null
inner join RentAgreementEpisode e on e.AgreementEpisodeId = l.LinkId and l.LinkTypeId = 2
inner join SystemFormResponse sfr on sfr.FormId = aa.ApplicationId AND sfr.FormTemplateId = 5 /*(systemformtype 5 = Pet Register)*/
inner join SystemFormPage p on p.FormTemplateId = sfr.FormTemplateId AND p.FormPageId = 6 /*(Pet Register Page)*/
inner join SystemFormSection s on s.FormPageId = p.FormPageId AND s.FormSectionId = 6 /*Pet Details */
Inner join SystemFormGroup g ON g.FormSectionId = s.FormSectionId and FormGroupId in (17)
inner join SystemFormQuestion q on q.FormGroupId = g.FormGroupId and q.EffectiveToDate is null and q.FormQuestionId = 132 /*CatName*/
inner join SystemFormResponseAnswer a on a.FormQuestionId = q.FormQuestionId and a.FormResponseId = sfr.FormResponseId
inner join SystemFormResponseDetail d on d.FormResponseAnswerId = a.FormResponseAnswerId
where aa.ApplicationTypeId = 1
) sub on sub.AgreementId = ra.AgreementId
where ra.AgreementId = 1775
这样做的目的是将我的狗和猫拉回来。结果集如下所示。
所以这个特殊的协议 - 有 2 条狗(前两行从第一个 UNION 和 1 只猫拉出。取决于宠物的类型 - 对于狗,他们希望返回品种 - 对于猫,只是动物的名称.
我想从下面的代码中实现的只是两列和 1 行。第 1 列是协议 ID,第二列是名称,但在此示例中,所有三个宠物都位于一个逗号分隔的行中,例如 - Lhasa Apso(狗)、Pug(狗)、PussPuss(猫)
非常感谢
解决方案
根据我们的查询,似乎整个事情可以缩写为以下内容:
SELECT e.AgreementId,
d.TextResponse + '(Dog), ' + d.TextResponse + 'Dog(2)' AS [name]
FROM AllocationApplication aa
INNER JOIN ContactGroupLink l ON l.ContactGroupId = aa.ContactGroupId
AND l.EffectiveToDate IS NULL
INNER JOIN RentAgreementEpisode e ON e.AgreementEpisodeId = l.LinkId
AND l.LinkTypeId = 2
INNER JOIN SystemFormResponse sfr ON sfr.FormId = aa.ApplicationId
AND sfr.FormTemplateId = 5 /*(systemformtype 5 = Pet Register)*/
INNER JOIN SystemFormPage p ON p.FormTemplateId = sfr.FormTemplateId
AND p.FormPageId = 6 /*(Pet Register Page)*/
INNER JOIN SystemFormSection s ON s.FormPageId = p.FormPageId
AND s.FormSectionId = 6 /*Pet Details */
INNER JOIN SystemFormGroup g ON g.FormSectionId = s.FormSectionId
AND FormGroupId IN (16, 17, 18, 19, 20, 25, 26)
INNER JOIN SystemFormQuestion q ON q.FormGroupId = g.FormGroupId
AND q.EffectiveToDate IS NULL
AND q.FormQuestionId = 118 /*DogName*/
INNER JOIN SystemFormResponseAnswer a ON a.FormQuestionId = q.FormQuestionId
AND a.FormResponseId = sfr.FormResponseId
INNER JOIN SystemFormResponseDetail d ON d.FormResponseAnswerId = a.FormResponseAnswerId
WHERE aa.ApplicationTypeId = 1
AND e.AgreementId = 1775;
不需要UNION ALL
or STUFF
。除非我们缺少(很多)信息。
推荐阅读
- javascript - 无法读取未定义的属性“moduleType”
- url - 如果 Edge 是默认浏览器,如何获取此 .cmd 文件中的 URL 以在 Internet Explorer 而不是 Edge 中打开?
- docker - 通过 docker 部署失败
- php - 使用复选框将数据放入我的数据库
- c# - 应用程序无法将表添加到 Sql server 数据库
- java - 如何将音频文件(mp3 或 acc)转换为拆分立体声文件?
- javascript - 如何通过在 CSS 上同时使用百分比和像素来使我的整个项目响应?
- php - 从 Laravel 图像 url 中删除“存储”
- sql - Oracle:基于映射表的动态SQL语句
- .net-core - Service Fabric 找不到资源文件