SQL学习之数据转换--行列转换_2

Posted heisenburg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL学习之数据转换--行列转换_2相关的知识,希望对你有一定的参考价值。

之前我已经写过行转列的文章可参考https://www.cnblogs.com/heisenburg/p/11624836.html

其他形式的行转列

    上面的文章中行专列的情形是players字段的数据类型为整数,如果字段数据类型为string类型的话,sum函数肯定是用不了了,那么怎么办呢?

这种问题其实数据库的开发者们早就想到了,而且有解决方案了。解决方案就是string_agg(),针对字符串类型的聚合函数。

如果有如下数据:

技术图片

    需要转换成如下形式:

技术图片

按照之前篇的方法,只要把sum()换成字符串聚合函数就行了,所以可以如下写:

SELECT 
name,
string_agg(case when course=‘语文‘ then grade else ‘‘ end,‘‘) as "语文",
string_agg(case when course=‘数学‘ then grade else ‘‘ end,‘‘) as "数学",
string_agg(case when course=‘英语‘ then grade else ‘‘ end,‘‘) as "英语"
from
dw_temp.score
group by name;

如果老板又有要求格式改成这样的:

技术图片

 又当如何呢,还是用string_agg即可实现:

SELECT 
name,
string_agg(grade,‘,‘) as "grade"
from
dw_temp.score
group by name;

如上两种形式的行转列的关键还是字符串的聚合函数,所以只要有了string_agg(field,[separator])就很容易实现了,这是postgre数据库中的函数,

如果使用的是mysql则有group_concat(Field,[separator]) 函数。

以上,希望能帮到大家!

以上是关于SQL学习之数据转换--行列转换_2的主要内容,如果未能解决你的问题,请参考以下文章

还是SQL行列转换问题~~

迈入orcl的学习之----SQL函数

sql server行列转换问题

SQL行列转换6种方法

SQL行列转换

SQL 行列转换