【问题标题】:Need to create dynamic pivot in sql server需要在sql server中创建动态pivot
【发布时间】:2017-05-19 06:11:13
【问题描述】:

我有以下运行良好的查询,但它是一个静态枢轴。我想动态创建它。我想知道此代码需要进行哪些更改才能使其成为动态枢轴。 提前谢谢!!!!

select * from
    (
select g.NationalityName_1,DepartmentName_1,h.EmployeeID from HR_Department hr
            join
HR_EmploymentInformation h
    on h.DepartmentID=hr.DepartmentID
        join
HR_EmployeeDetail e
    on e.EmployeeID=h.EmployeeID
        join
GEN_Nationality g
    on g.NationalityID=e.DefaultNationalityID
) as fev
pivot 
(
    count(employeeId)
    for departmentname_1 in (Administration,Academia,[New Department 1],[New Department 2],[New Department 3],[New Department 5])
) as pvt

这是输出:

NationalityName_1   Administration  Academia    New Department 1    New Department 2    New Department 3    New Department 5
Algeria                 0            1          0                   0                   0                   0

这是上述查询的输出,也是正确的,我面临的问题是如果我创建一个新部门,我必须再次更改我不想要的代码。

【问题讨论】:

  • 如果我为您提供动态解决方案,那么您可以在您的代码中应用它吗?因为没有样本数据和预期输出,很难处理。
  • 是的,我可以运行查询..

标签: sql sql-server-2008 sql-server-2012


【解决方案1】:

试试这个:我们可以用下面的方式写动态PIVOT

DECLARE @col VARCHAR(1000)
DECLARE @sql VARCHAR(2000)

SELECT @col = COALESCE(@col + ', ','') + QUOTENAME(DepartmentName_1)
FROM HR_Department hr
JOIN HR_EmploymentInformation h ON h.DepartmentID = hr.DepartmentID
JOIN HR_EmployeeDetail e ON e.EmployeeID = h.EmployeeID
JOIN GEN_Nationality g ON g.NationalityID = e.DefaultNationalityID

SET @sql = '
    SELECT NationalityName_1, ' + @col + '
    FROM
        (SELECT g.NationalityName_1,
            DepartmentName_1,
            h.EmployeeID 
        FROM HR_Department hr
        JOIN HR_EmploymentInformation h ON h.DepartmentID = hr.DepartmentID
        JOIN HR_EmployeeDetail e ON e.EmployeeID = h.EmployeeID
        JOIN GEN_Nationality g ON g.NationalityID = e.DefaultNationalityID
        ) AS fev
    PIVOT 
    (
        COUNT(employeeId)
        FOR departmentname_1 IN ( ' + @col + ' )
    ) AS pvt'

EXEC (@sql) 

【讨论】:

  • 我试过你说的,但它给了我一个错误。我无法在评论中发布我的查询我不知道为什么
  • Msg 105, Level 15, State 1, Line 15 字符串'Acad'后面的非闭合引号。消息 102,级别 15,状态 1,第 15 行“Acad”附近的语法不正确。它给出了一个错误
  • 我认为数据中存在," 类似的东西。请您检查一下,不过如果您在问题中提供示例数据会更好。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2012-05-11
相关资源
最近更新 更多