【发布时间】:2021-10-21 06:51:16
【问题描述】:
我处理过一个查询,但只有一个部分让我感到不适。我正在尝试根据两个表的值在查询中创建一个列。我已经尝试过 CASE WHEN 并且它起作用,但是由于涉及的非唯一值,原始查询之间的查询中的行数没有增加。例如,我写的就是这种情况:
Select r.Id,
r.RequiredOn AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time'
as RequiredDate,
Concat(vs.Salutation, ' ',vs.FirstName, ' ', vs.LastName) as Name,
oo.Name as RequestingOrganization,
o.Name as Location,
Case
When r.IntendedOutcome = '1' Then 'T'
When r.IntendedOutcome = '2' Then 'R'
End as RequestType,
etr.TypeRequested,
Case
When etr.Identifier is not null then etr.Identifier
When etr.Identifier is null then ' '
End as Identifier,
f.OfferedOn,
f.OfferResponse,
r.DestinationCountryCodes,
o.Id,
CASE
WHEN o.Id = oir.OrganizationId AND oir.OrganizationRoleId =
'de51c814-f86d-49c9-941b-999a98be4894'
THEN 1
ELSE NULL
END AS Bk1
From [Request] r
Left Join Recovered etr
on etr.DistributionRequestId = r.Id
Left Join [Offer] f
on f.Id = etr.Id
Left Join [dbo].Contact vs
on vs.Id = r.SId
Left Join [dbo].Organization o
on o.Id = r.SLocationId or o.Id = r.RLocationId
Left Join [dbo].Organization oo
on oo.Id = r.RequestingOrganizationId
Left Join dbo.OrganizationInRole oir
on oir.OrganizationId = o.Id
Where f.Response = 'Accepted' or f.Response is NULL
图片显示该表的OrganizationId 不是唯一的,因此当匹配OrganizationId 并找到OrganizationRoleId 时,它会将所有OrganizationRoleId 带入查询中并添加到其中,而不是仅仅看到它有特定的角色 ID 并添加到我需要的一行。
“组织角色”列不唯一,每个组织都可以有多个角色(有时是 4-5 个)。我需要如果 OrganizationId 是 A 并且表 2 中匹配的 OrganizationId 在 OrganizationRole 列中具有标识符,则添加 1。
Organization 表(表 2)有一个 OrganizationId 列和一个 OrganizationRole 列。 OrganizationId 不是唯一的,因为 OrgnanizationId 可以连续使用 5 行,因为该组织有 5 个角色。
我得到的结果是查询正在从与该表匹配的组织中提取所有角色。与原始查询相比,它基本上增加了 33% 的行。
【问题讨论】:
-
我无法完全理解这个问题。你能添加几行样本数据和预期的结果吗?请仅包括相关的列。一个最小的例子就可以了。
-
请edit您的问题包括示例数据和您试图获得的结果,以及您正在使用的完整 SQL(而不仅仅是脱离上下文的部分) .见Why should I provide a Minimal Reproducible Example for a very simple SQL query?
-
听起来您可能需要通过子查询或应用/横向连接以某种方式预先聚合您的数据。很难理解您的意思,因此一组说明您的问题和所需结果的示例数据将大有帮助。并标记您的特定数据库。
标签: sql