Applying the MIN aggregate function to a BIT field

前端 未结 7 558
甜味超标
甜味超标 2020-12-05 01:36

I want to write the following query:

SELECT   ..., MIN(SomeBitField), ...
FROM     ...
WHERE    ...
GROUP BY ...

The problem is, SQL Ser

7条回答
  •  猫巷女王i
    2020-12-05 02:17

    Since there are only two options for BIT, just use a case statement:

    SELECT CASE WHEN EXISTS (SELECT 1 FROM ....) THEN 1 ELSE 0 END AS 'MinBit'
    FROM ...
    WHERE ...
    

    This has the advantage of:

    • Not forcing a table scan (indexes on BIT fields pretty much never get used)
    • Short circuiting TWICE (once for EXISTS and again for the CASE)

    It is a little more code to write but it shouldn't be terrible. If you have multiple values to check you could always encapsulate your larger result set (with all the JOIN and FILTER criteria) in a CTE at the beginning of the query, then reference that in the CASE statements.

提交回复
热议问题