SQL 选择值 = 'X' 或最小值

标签 sql sql-server-2008

我有一个大型客户数据库,其中客户表包含人员及其与组织的关系。人们可能属于多个组织(这允许在组织内进行划分)。拥有多个组织的人必须有一个默认组织,这通常由 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/

相关文章:

SQL 2000/2005/2008 - 查找列的唯一约束名称

mysql - 将十六进制数据从 varchar 类型字段移动到 bigint 类型 (mysql)

sql - Postgres UPSERT 在更新时重用 INSERT 中的列值

php - 存储 SQL 结果以在其他网页上使用

sql - 如何将 SQL 子查询分配给变量并在同一上下文中使用它

sql-server - 如何识别系统查询

sql - T-SQL : Paging WITH TIES

sql-server-2008 - 如何将用作时间的 5 位 INT 转换并显示为 HH :MM:SS in SQL

php - 在 PHP 中,每页多少次 DB 调用是可以的?

mysql - 在列中插入多个值