mysql行转列sql函数_sql动态行转列的两种方法

第一种方法:

代码如下:

select *from ( select Url,case  when  Month=01 then  ‘1月’ when  Month=02 then ‘2月’ when  Month=03 then  ‘3月’ when  Month=04 then ‘4月’ when  Month=05 then  ‘5月’ when  Month=06 then ‘6月’ when  Month=07 then  ‘7月’ when  Month=08 then ‘8月’ when  Month=09 then  ‘9月’ when  Month=10 then ‘ 10月’ when  Month=11 then  ’11月’ when  Month=12 then ‘ 12月’

end  month,Quality from  (

select Url,DATENAME(M,AuditingTime)Month,SUM(Quality) Quality from  tb_order as a left join  tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join  tb_OrderList as c on c.OrderID=a.ID where AuditingTime>’2013-01-01′ and b.ID>0 and Auditing=2

group by Url,DATENAME(M,AuditingTime) )as h ) as hh

pivot ( sum(Quality) for month in([1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])) as a

第二种方法:

代码如下:

declare @sql varchar(8000)

select @sql = isnull(@sql + ‘,’ , ”) + ‘[‘+CONVERT(varchar(7),AuditingTime,20)+’]’

from  tb_order as a left join  tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join  tb_OrderList as c on c.OrderID=a.ID where AuditingTime>’2013-01-01′ and b.ID>0 and Auditing=2

group by CONVERT(varchar(7),AuditingTime,20) print @sql declare @sql2 varchar(8000)=” set @sql2=’ select *from (

select Url, CONVERT(varchar(7),AuditingTime,20) AuditingTime,SUM(Quality) Quality from  tb_order as a left join  tb_WebSiteInfo as b on a.WebSiteInfoID=b.ID left join  tb_OrderList as c on c.OrderID=a.ID where b.ID>0 and Auditing=2

group by Url, CONVERT(varchar(7),AuditingTime,20)

) as hh pivot (sum(Quality) for AuditingTime in (‘ + @sql + ‘)) b’

print @sql2

exec(@sql2)

您可能感兴趣的文章:mysql 行转列和列转行实例详解sql语句实现行转列的3种方法实例SQLServer行转列实现思路记录MySQL存储过程中使用动态行转列mssql 数据库表行转列,列转行终极方案Sql Server 2000 行转列的实现(横排)SQL查询语句行转列横向显示实例解析table 行转列的sql详解SQL行转列和列转行代码详解SQL基础教程之行转列Pivot函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,行转列可以使用多种方法实现。以下是两种常用的方法方法1:使用GROUP_CONCAT函数 ```sql SELECT id, name, GROUP_CONCAT(CASE WHEN subject = '语文' THEN score END SEPARATOR '') AS '语文', GROUP_CONCAT(CASE WHEN subject = '数学' THEN score END SEPARATOR '') AS '数学', GROUP_CONCAT(CASE WHEN subject = '英语' THEN score END SEPARATOR '') AS '英语' FROM test1 GROUP BY name; ``` 在这个方法中,通过使用GROUP_CONCAT函数将每个科目分数连接成一个字符串,并使用CASE语句将对应科目的分数筛选出来。 方法2:使用SUM和IF函数 ```sql SELECT id, name, SUM(IF(subject = '语文',score,0)) AS '语文', SUM(IF(subject = '数学',score,0)) AS '数学', SUM(IF(subject = '英语',score,0)) AS '英语' FROM test1 GROUP BY name; ``` 在这个方法中,使用IF函数对每个科目的分数进行条件判断,如果科目匹配,则返回分数,否则返回0。然后使用SUM函数将每个科目的分数进行求和。 以上就是实现MySQL行转列两种常用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL行转列、列转行](https://blog.csdn.net/w5761499123/article/details/126211094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值