sqlserver 行转列

系统 1819 0
      
        第一种
      
    

SELECT title,
SUM(CASE typeid WHEN '1' THEN gjdate ELSE 0 END) AS '调休',
SUM(CASE typeid WHEN '2' THEN gjdate ELSE 0 END) AS '请假',
SUM(CASE typeid WHEN '3' THEN gjdate ELSE 0 END) AS '加班'
FROM lfil_tb
GROUP BY title

      
        
第二种



DECLARE @sql_str NVARCHAR(MAX) DECLARE @sql_col NVARCHAR(MAX) DECLARE @tableName SYSNAME
-- 表名 DECLARE @groupColumn SYSNAME -- 分组字段(title name 什么玩意的) DECLARE @row2column SYSNAME -- 行转列的字段 DECLARE @row2columnValue SYSNAME -- 行变列值的字段 SET @tableName = ' lfil_tb ' SET @groupColumn = ' title ' SET @row2column = ' typeid ' SET @row2columnValue = ' gjdate ' -- 从行数据中获取可能存在的列 SET @sql_str = N ' SELECT @sql_col_out = ISNULL(@sql_col_out + '' , '' , '''' ) + QUOTENAME([ ' +@row2column+ ' ]) FROM [ ' +@tableName+ ' ] GROUP BY [ ' +@row2column+ ' ] ' -- PRINT @sql_str EXEC sp_executesql @sql_str,N ' @sql_col_out NVARCHAR(MAX) OUTPUT ' ,@sql_col_out= @sql_col OUTPUT -- PRINT @sql_col SET @sql_str = N ' SELECT * FROM ( SELECT [ ' +@groupColumn+ ' ],[ ' +@row2column+ ' ],[ ' +@row2columnValue+ ' ] FROM [ ' +@tableName+ ' ]) p PIVOT (SUM([ ' +@row2columnValue+ ' ]) FOR [ ' +@row2column+ ' ] IN ( ' + @sql_col + ' ) ) AS pvt ORDER BY pvt.[ ' +@groupColumn+ ' ] ' -- PRINT (@sql_str) EXEC (@sql_str)





 

sqlserver 行转列


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论