我们有一个SQL Server 2014
数据库,其中包含两个表:
在“零件”表中,BitColours是按位数字,引用了“颜色”表中的行。
我们被要求产生这样的查询:
我以前从未做过这种类型的操作,因此不胜感激任何指导。
谢谢
答案 0 :(得分:6)
您可以尝试通过AND
按位运算符(&
)连接两个表。
查询1 :
SELECT
p.id,
p.part,
STUFF((
SELECT ',' + c.Colour
FROM colours c
WHERE c.BitId & p.BitColurs > 0
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') colours
FROM parts p
Results :
| id | part | colours |
|----|--------|-------------|
| 1 | abc123 | Red,Blue |
| 2 | xyt788 | Black,Green |
说明
&
AND按位运算符将从两个值中比较两个二进制。
例如:
BitColor
是3
= 00011
。
这是一个示例,在二进制16之后,我忽略了很多零。
红色
00011
---------------------
(&) 00001 = Red (1)
---------------------
00001 = (1)
蓝色
00011
---------------------
(&) 00010 = Blue (2)
---------------------
00010 = (2)
黑色
00011
---------------------
(&) 00100 = Black (4)
---------------------
00000 = (0)
绿色
00011
---------------------
(&) 01000 = Green (8)
---------------------
00000 = (0)
因此,我们可以使用BitId
和BitColurs
通过二进制进行计算,并得到大于0
的结果,即您可以获取该值。