Sql server 如何筛选透视结果

Sql server 如何筛选透视结果,sql-server,sql-server-2008-r2,pivot,Sql Server,Sql Server 2008 R2,Pivot,是否可以从轴结果中排除某些变量 我想知道是否可以排除Pivot表中值为0的列 假设EventType Meeting的计数为0,是否可以完全不显示它?我希望您已经实现了问题的以下解决方案 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT distinct ',' + QUOTENAME(EventType) from dbo

是否可以从轴结果中排除某些变量

我想知道是否可以排除Pivot表中值为0的列


假设EventType Meeting的计数为0,是否可以完全不显示它?

我希望您已经实现了问题的以下解决方案

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(EventType) 
                    from dbo.testTable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT year,' + @cols + ' 
            from 
            (
              select EventType, 
                  year = year(date) 
              from dbo.testTable
            ) x
            pivot 
            (
                count(EventType)
                for EventType in (' + @cols + ')
            ) p '

execute(@query)
如果是这样,那么您可以执行以下操作

DECLARE @cols AS NVARCHAR(MAX),
@where AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(EventType) 
                    from dbo.testTable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @where = ' where ' + STUFF((SELECT distinct ' Or ' + QUOTENAME(EventType) + ' <> 0 '
                    from dbo.testTable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,2,3,'')

        set @query = 'SELECT year,' + @cols + ' 
            from 
            (
              select EventType, 
                  year = year(date) 
              from dbo.testTable
            ) x
            pivot 
            (
                count(EventType)
                for EventType in (' + @cols + ')
            ) p ' + @where


execute(@query)

@bluefeet提供的对您前面问题的回答似乎很好。在这种情况下,具有动态查询的部分工作正常,如果原始数据中没有具有会议类型的行,则该列不包括在结果中。我尝试了解决方案,但没有注意到不好的结果。