【发布时间】:2021-09-03 21:49:30
【问题描述】:
我有两个 SQL Server 表:
FormSchema 列
SchemaId, SchemaName, Tenant
RoleTable 列
SchemaId, RoleId, RoleName, Tenant
预期结果(包括以下三个条件):
- 在结果中选择租户“A”中存在单个 SchemaName 的行
- 在结果中选择租户“全部”中存在单个 SchemaName 的行
- 如果租户“A”和“全部”中都存在重复/相同的 SchemaName,则选择结果中属于租户“A”的行。
查询:
select *
from
(select
fs1.schemaid, fs1.schemaName, ar1.roleId, ar1.roleName, ar1.tenant,
rn = row_number() over (partition by fs1.schemaName
order by case when ar1.tenant = 'ALL' then 2 else 1 end, ar1.tenant)
from
RolesTable ar1
full outer join
FormSchema fs1 on ar1.SchemaId = fs1.SchemaId) as t3
where
rn = 1
and Tenant in ('B', 'All')
请参阅db fiddle 了解表格、记录以及预期和实际结果。
将租户作为“B”预期结果时我面临的问题是错误的,但如果我使用“A”预期结果是正确的。
“B”的预期结果是错误的**,因为它不满足以下条件:
- 如果租户“B”和“全部”中存在重复/相同的 SchemaName,则选择结果中属于租户“B”的行。即架构名称“汽车”。所以查询应该在结果'B''Car'行中选择。
“B”的预期结果:
SchemaId RoleId RoleName Tenant
--------------------------------------------------------------------
'664' '40ecca83-7fd9-4d63-9f56-c7a48442d844' '#Test-1' 'B'
'456' '40ecca83-7fd9-4d63-9f56-c7a48442d844' '#Test-1' 'B'
提前致谢。
【问题讨论】:
-
发布您对“B”的预期结果并解释您当前结果错误的原因。
-
我已经更新了两个问题
标签: sql sql-server tsql join