我可以将列标题名称作为动态数据透视表中的值返回吗?

时间:2015-07-06 13:02:47

标签: sql sql-server sql-server-2008 pivot-table

第一次发布海报,对此问题表示歉意。

我在MS SQL Server Management Studio中创建了一个动态数据透视表,显示员工是否具有某种技能。列标题代表我想要搜索的技能,可以是一个或多个。目前它看起来像这样;

StaffMember | Skill1 | Skill2 | Skill3 | Skill4

如果工作人员具有该技能,则该表返回1,如果没有,则返回0。我希望能够将所有字段连接成一个字符串,使用列标题作为值,并添加一些基本格式,即;

Joe Bloggs [Skill1-Skill4]

然后将其返回到我的MS Excel前端应用程序。

有人可以帮忙吗?

更新:

DECLARE @SQLQuery NVARCHAR(MAX)
SET @SQLQuery = '

SELECT *
FROM
(
SELECT EmployeeID, SkillID AS SkillData
FROM Skills
) P

PIVOT ( 
COUNT(SkillData)
FOR [SkillData] IN (' + @KeySkills + ')
) AS Piv
'

这就是我正在执行的(通过sp_executeSQL @SQLQuery),其中变量@KeySkills可以是任意数量的技能。如果用户具有相关技能,则输出显示1

它需要是动态的,因为我无法控制通过@KeySkills查询的技能数量。

我希望能够连接列名称,其值为1。我可以返回到前端应用程序,作为工作人员具备这些技能的视觉标记。

1 个答案:

答案 0 :(得分:0)

动态创建数据透视表可以使用FOR XML来构建列字符串+ STUFF以删除前导逗号:

DECLARE @KeySkills NVARCHAR(MAX);
SET @KeySkills=STUFF(
    (SELECT DISTINCT
        ','+QUOTENAME(SkillID)
    FROM
        Skills
    FOR XML PATH('')),
    1,
    1,
    ''
);