我有一个大型客户数据库,其中客户表包含人员及其与组织的关系。人们可能属于多个组织(这允许在组织内进行划分)。拥有多个组织的人必须有一个默认组织,这通常由 isDefault = T
确定,但是前端应用程序也可以通过选择确定默认应用程序 where isDefault = F
MIN(RowID)
。
所以在下表中我们知道 PersonId
3
有一个默认的 OrgID
11
(IsDefault = T )
但是,我需要弄清楚用于查找 PersonID 12 的默认值的查询。
即
Select orgId as default from myTable
where personID = 12
and isDefault = 'T'
如果返回 0 行,则执行如下查询:
Select orgId as default from myTable
where personID = 12
and
RowId in (select Min(rowId)
from myTable
where PersonId = 12)
RowID | PersonID | OrgId | isDefault
1 | 12 | 14 | F
2 | 12 | 17 | F
3 | 3 | 11 | T
4 | 3 | 14 | F
最佳答案
我想你可以通过两次排序来得到你想要的,首先是 IsDefault 是 T 还是 F,然后是 RowId,然后取最上面的结果:
SELECT TOP 1 OrgId as [Default]
FROM MyTable
WHERE PersonId = 12
ORDER BY
CASE WHEN IsDefault = 'T' THEN 0 ELSE 1 END,
RowId
关于SQL 选择值 = 'X' 或最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480216/