在这种情况下,
WHERE
子句会非常简单,因为您将处理二进制数的十进制(基数10)对应项... 可爱的地方在于
JOIN
。 为了澄清,该方法不使用bit[]列或
BINARY
类型 - 只使用
INT
。
希望您会发现这很有帮助。
DECLARE @G1 INT = 1,
@G2 INT = 2,
@G3 INT = 4,
@G4 INT = 8,
@G5 INT = 16,
@G6 INT = 32,
@G7 INT = 64
;WITH Grading (Grade, BinScore) AS
(
SELECT 'G1', 1 UNION ALL
SELECT 'G2', 2 UNION ALL
SELECT 'G3', 4 UNION ALL
SELECT 'G4', 8 UNION ALL
SELECT 'G5', 16 UNION ALL
SELECT 'G6', 32 UNION ALL
SELECT 'G7', 64
)
,Product (ProductName, BinGrading) AS
(
SELECT 'Foobar', 73 UNION ALL
SELECT 'Franglesnap', 3 UNION ALL
SELECT 'Mebble', 32
)
SELECT *
FROM Product
WHERE BinGrading = (@G1 + @G4 + @G7)