对不起,标题有点模糊。
我继承了这样的桌子...
HG_ID | HG_Description
1 | Blue
2 | Red
4 | Green
8 | Yellow
16 | White
32 | Violet
64 | Black
该信息基于 7 位二进制文件,例如0000001代表蓝色0000011代表蓝色 + 红色
我有另一个包含十进制等效项的表。
0000001 = 1 in the second table
0000011 = 3 in the second table.
我的问题是,如果我在第二个表中有 66,我不知道如何执行一个选择语句,在同一个单元格中给我黑色和红色。
我知道如何在每个表中出现的相同数字上执行此操作,但当有多个选择时则不然。
我希望我已经明确表示这是我的第一篇文章。
谢谢。马尔
按位和运算符&
从此表中获取相应的行。例如(SQL Fiddle):
DECLARE @colorValue int = 66
SELECT *
FROM Table1
WHERE HG_ID & @colorValue = HG_ID
然后,您可以使用FOR XML PATH('')
技巧来模拟MySQL的GROUP_CONCAT()
函数,并将其简化为一行(SQL Fiddle):
DECLARE @colorValue int = 66
SELECT STUFF(
(SELECT ', ' + CAST(HG_Description AS VARCHAR(MAX))
FROM Table1
WHERE HG_ID & @colorValue = HG_ID
FOR XML PATH('')
), 1, 2, '')
当然,您可以使用它从另一个表中进行选择。假设您有一个包含以下内容的表Table2
:
CREATE TABLE Table2
([COLOR] int);
INSERT INTO Table2
([COLOR])
VALUES
(66),
(23),
(49)
;
从上面扩展的查询,
SELECT Table2.COLOR AS id,
STUFF(
(SELECT ', ' + CAST(HG_Description AS VARCHAR(MAX))
FROM Table1
WHERE HG_ID & Table2.COLOR = HG_ID
FOR XML PATH('')
), 1, 2, '') AS Colors
FROM Table2
将产生以下结果(SQL Fiddle):
标识颜色66 红, 黑23 蓝色、红色、绿色、白色49 蓝色、白色、紫色