Вы можете попытаться соединить две таблицы с помощью 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
Результаты :
| id | part | colours |
|----|--------|-------------|
| 1 | abc123 | Red,Blue |
| 2 | xyt788 | Black,Green |
Объяснить
&
И побитовый оператор И будет сравнивать два двоичных значения из двух.
например:
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
. Вы можете получить значение.