【发布时间】:2016-08-13 08:11:07
【问题描述】:
我正在尝试展平存储在位掩码中的函数列表,并在这样的枚举表中“解释”:
CREATE TABLE #enum([ID] [int] NOT NULL IDENTITY(1, 1) PRIMARY KEY,
[Display] [varchar] (50) NOT NULL,
[DataValue] [int] NOT NULL);
INSERT INTO [#enum] ([Display], [DataValue])
SELECT 'Function A', 1
UNION SELECT 'Function B', 2
UNION SELECT 'Function C', 4
UNION SELECT 'Function D', 8
UNION SELECT 'Function E', 16
UNION SELECT 'Function F', 32
UNION SELECT 'Function G', 64;
我的数据表看起来像这样(显然简化了很多):
CREATE TABLE #people ([ID] [int] NOT NULL IDENTITY(1, 1) PRIMARY KEY,
[PersonName] [varchar] (50) NOT NULL,
[Functions] [int] NOT NULL);
INSERT INTO [#people] ([PersonName], [Functions])
SELECT'Ken Hurt', 8
UNION SELECT 'Justin Case', 33
UNION SELECT 'Bill Board', 73;
现在我想在查询#people 表时返回一个以逗号分隔的函数列表;结果如下:
ID Name Functions
1 Ken Hurt Function D
2 Justin Case Function A, Function F
3 Bill Board Function A, Function D, Function G
我一直在研究动态 SQL、PIVOT、STUFF() 和 FOR XML PATH() 已经有一段时间了,但我显然太愚蠢了,无法消化这个美丽的概念。能否请你帮忙?使用 WHILE 甚至更糟的光标浏览列表似乎就像用大锤敲击坚果一样。谢谢!
【问题讨论】:
-
你为什么选择违反第一范式来处理这种多对多关系?
-
不是我 - C# 开发人员显然喜欢使用位掩码
-
返回一个规范化的结果集,让 C# 开发人员按照他们想要的方式对其进行格式化。
-
@JeroenMostert 抱歉,我已经编辑了帖子
标签: sql sql-server tsql pivot