沙漏里的时光
贫民
贫民
  • 最后登录2019-08-27
  • 发帖数2
阅读:9372回复:3

[sqlserver]sql脚本,将查询的数据横向,纵向统计

楼主#
更多 发布于:2019-08-27 10:29

-- 本月薪酬汇总(部门/区县视图)
-- EXEC [dbo].[up_Gather_Summary] '38890000', 2018, 10
ALTER PROC [dbo].[up_Gather_Summary](
        @companyId                NVARCHAR(40),
        @year                     INT,
        @month                    INT
 )
 AS

        DECLARE  @sql NVARCHAR(MAX)=''

        SET @sql += ' SELECT        
                                 b.Unit_CountyID                                                                                                                                                                                                AS ''CountyId''
                                ,(CASE WHEN GROUPING(b.Unit_CountyID) = 0 THEN MAX(b.Unit_CountyName) ELSE ''总计'' END)                                                AS ''UnitDisplayName''
                                ,(CASE WHEN GROUPING(b.Unit_CountyID) = 0 THEN ISNULL(MIN(g.DisplayOrder), 2147483646) ELSE 2147483647 END)                AS ''DisplayOrder'' '
                        
        --拼接表头(奖金项)
        SELECT @sql += '
                                ,SUM(CASE WHEN d.BonusEntryID = ' + CAST(e.OID AS NVARCHAR(40)) + ' THEN d.[Amount] ELSE 0 END)  AS '''+ MAX(e.Name) +'@@'+ CAST(e.OID AS NVARCHAR(40)) + ''''
                                FROM dbo.[Grant] a WITH(NOLOCK)                        
                                INNER JOIN [dbo].[GrantCluster] gc                      WITH(NOLOCK) ON gc.GrantId = a.Id AND gc.LogicDeleteFlag = 0  
                                INNER JOIN [dbo].[GrantClusterRefBonusEntry] ref        WITH(NOLOCK) ON ref.GrantClusterId = gc.Id
                                INNER JOIN [dbo].[BonusEntry] e                         WITH(NOLOCK) ON e.OID = ref.BonusEntryID
                                WHERE
                                         a.[LogicDeleteFlag]                = 0
AND a.[Status]                     = 10
AND a.[Applicant_CompanyID]        = @companyId
AND a.[Token_Year]                 = @year          
AND a.[Token_Month]                = @month
GROUP BY e.OID
ORDER BY e.OID

        SET @sql += '
                                ,ISNULL(SUM(d.Amount), 0) AS AmountSubtotal                
                                FROM dbo.[Grant] a                          WITH(NOLOCK)        
                                INNER JOIN dbo.GrantUnit b                  WITH(NOLOCK)        ON b.GrantId = a.Id AND b.[LogicDeleteFlag] = 0
                                INNER JOIN dbo.GrantEmployee c              WITH(NOLOCK)        ON c.GrantUnitId = b.Id AND c.[LogicDeleteFlag] = 0
                                INNER JOIN dbo.GrantEmployeeSegment d       WITH(NOLOCK)        ON d.GrantEmployeeId = c.Id
                                INNER JOIN dbo.GrantCluster        e        WITH(NOLOCK)        ON e.Id         = d.GrantClusterId AND e.[LogicDeleteFlag] = 0
                                INNER JOIN dbo.BonusEntry f                 WITH(NOLOCK)        ON f.OID = d.BonusEntryID
                                LEFT  JOIN dbo.VBDepartment g               WITH(NOLOCK)        ON g.ID = b.Unit_CountyID
                                WHERE    
                                         a.[LogicDeleteFlag]                = 0
AND a.[Status]                     = 10
AND a.[Applicant_CompanyID]        = @companyId
AND a.[Token_Year]                 = @year          
AND a.[Token_Month]                = @month
GROUP BY b.Unit_CountyID WITH ROLLUP
ORDER BY DisplayOrder '

        --PRINT(@sql)
        EXEC SP_EXECUTESQL @sql, N'
                                                         @companyId         NVARCHAR(40),
                                                         @year              INT,
                                                         @month             INT '
                                                        ,@companyId
                                                        ,@year
                                                        ,@month

           关键字 GROUPING  WITH ROLLUP

最新喜欢:

Sky斌Sky斌 doubleyongdouble...
doubleyong
管理员
管理员
  • 最后登录2025-10-18
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
沙发#
发布于:2019-08-27 11:36
沙漏里的时光:我是 li yi  ,哈哈。回到原帖
哈哈,欢迎欢迎
知识需要管理,知识需要分享
沙漏里的时光
贫民
贫民
  • 最后登录2019-08-27
  • 发帖数2
板凳#
发布于:2019-08-27 10:46
doubleyong:这个存储过程写的6回到原帖
我是 li yi  ,哈哈。
doubleyong
管理员
管理员
  • 最后登录2025-10-18
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
地板#
发布于:2019-08-27 10:39
这个存储过程写的6
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号