可能我错过了一些东西,但对我来说看起来仍然很奇怪为什么不可能在比特字段上使用max和min聚合.所以,如果我尝试做这样的事情:
declare @temp table (data bit)
insert into @temp
select 1 union all
select 0
select max(data) from @temp
Run Code Online (Sandbox Code Playgroud)
我会得到一个错误Operand data type bit is invalid for max operator.但是如果我做这样的事情:
declare @temp table (data bit)
insert into @temp
select 1 union all
select 0
select top 1 * from @temp order by data desc
Run Code Online (Sandbox Code Playgroud)
它工作正常,因此SQL Server 确实知道如何对位字段进行排序.但订购数据的可能性意味着我们可以获得最大值或最小值.这种限制背后的原因是什么?
除非我们能够从 SQL Server 团队获得一些内部信息,否则我们可能不得不接受有时答案只是“因为”。不过,文档非常清楚,例如MIN状态的 MSDN 页面;
MIN 可与 numeric、char、varchar、uniqueidentifier 或 datetime 列一起使用,但不能与位列一起使用。
我的猜测(是的,我准备好因为在如此答案中冒险猜测而受到批评!)是好处不会超过更改代码的风险。到底有什么好处呢?
您不是第一个提出这个问题的人,但对BIT 列上的聚合函数的响应: MS Connect 上的 MIN 和 MAX 表明它不太可能改变。