写一个符合自己要求使用透视存储过程。在开发时,直接使用即可。

动态透视表

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:      Insus.NET
-- Create date: 2019-05-19
-- Update date: 2019-05-19
-- Description: 动态透视
CREATE PROCEDURE  [dbo].[usp_Dynamic_Pivot]
(        
    @table_name SYSNAME,           --透视的表名
    @common_column SYSNAME,        --常规共用列名
    @which_row_to_column SYSNAME,  --哪一行需要透视为列的列名
    @sum_column SYSNAME            --计和的列名
)    
AS
BEGIN
DECLARE @Comma_Delimited_Column_Names NVARCHAR(MAX)
DECLARE @query NVARCHAR(MAX) = N'SET @Comma_Delimited_Column_Names = STUFF((SELECT DISTINCT '','' + QUOTENAME('+ @which_row_to_column +') 
        FROM '+ @table_name +' 
        FOR XML PATH(''''), TYPE
        ).value(''.'', ''NVARCHAR(MAX)'') 
    ,1,1,'''')'

EXECUTE sp_executeSql @query, N'@Comma_Delimited_Column_Names AS NVARCHAR(MAX) OUTPUT',@Comma_Delimited_Column_Names OUTPUT
        
DECLARE @sql AS NVARCHAR(MAX) = N'
            SELECT '+ @common_column +',            
                ' + @Comma_Delimited_Column_Names + ' 
            FROM 
            (
                SELECT '+ @common_column +','+ @which_row_to_column +','+ @sum_column +' FROM '+ @table_name +'
            ) AS [Source]
            PIVOT 
            (
                SUM('+ @sum_column +')
                FOR '+ @which_row_to_column +' IN (' + @Comma_Delimited_Column_Names + ')
            ) AS [PIVOT TABLE] '
                

EXECUTE sp_executeSql @sql

END
GO
Source Code

相关文章:

  • 2022-12-23
  • 2021-07-26
  • 2021-12-26
  • 2021-10-30
  • 2022-02-09
  • 2021-11-29
  • 2021-12-12
  • 2021-11-29
猜你喜欢
  • 2021-04-13
  • 2021-07-15
  • 2021-10-27
  • 2021-04-23
  • 2021-12-26
  • 2021-12-31
  • 2021-12-06
相关资源
相似解决方案