【问题标题】:SQL Pivot with Specifying Values指定值的 SQL Pivot
【发布时间】:2013-08-20 19:28:07
【问题描述】:

我想设置一个如下所示的数据透视语句,但我不想传递列值,而是希望它返回所有值;我想将底部的括号留空(即 Sum(fldNI) FOR fldCI IN ( )....

SELECT * 
    FROM    
(
    SELECT fldPK
          ,fldFPK
          ,fldNI
          ,fldCI
    FROM qryOne 
) as x
PIVOT
(
    Sum(fldNI) FOR fldCI IN ()
) as p

【问题讨论】:

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


    【解决方案1】:

    当您使用 PIVOT 函数时,必须知道这些值才能将它们转换为列。如果您不提前知道这些值,那么您将不得不实施动态 SQL 来获得结果。动态 SQL 代码将创建将转换为列的值列表,然后将该列表连接到执行的查询字符串。

    代码将类似于:

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fldCI) 
                        from qryOne
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT fldPK, fldFPK, ' + @cols + ' 
                from 
                (
                   SELECT fldPK
                        ,fldFPK
                        ,fldNI
                        ,fldCI
                  FROM qryOne 
                ) x
                pivot 
                (
                    sum(fldNI)
                    for fldCI in (' + @cols + ')
                ) p '
    
    execute sp_executesql @query
    

    【讨论】:

    • 感谢您的帮助,我刚刚编辑了我的帖子以包含我正在处理的全部内容。我一直在试图弄清楚如何让所有代码动态工作,但它不会工作。
    • @tripleddev 如果您还有其他问题,那么您应该在新问题中发布一个新问题,不要编辑您的原始问题。但是您不能在函数中包含动态 SQL。我已回滚您的更改,请发布一个新问题,其中包含有关内联函数的详细信息
    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多