有时候多行数据需要一行显示, 这就需要行转列的sql啦.
首先 ,要知道 行转列当然是要以某个字段进行分组的,然后再根据表中 一个字段的值做转列后的字段名, 这个值所对应的另一个字段作为 值
示例:
表名: XX班
班级 学生 身高 一班 甲 161 一班 乙 162 一班 丙 163 一班 丁 164 一班 戊 165
假如:要将上表进行转列 转换结果如下表:
班级 甲 乙 丙 丁 戊 一班 161 162 163 164 165
以班级进行分组, 以学生 作为字段名,以身高为每个学生字段的额值.
SELECT 班级
SUM(CASE WHEN 学生 = 甲 TNEN 身高 ELSE 0 END) 甲,
SUM(CASE WHEN 学生 = 乙 TNEN 身高 ELSE 0 END)乙 ,
SUM(CASE WHEN 学生 = 丙 TNEN 身高 ELSE 0 END)丙 ,
SUM(CASE WHEN 学生 = 丁 TNEN 身高 ELSE 0 END)丁 ,
SUM(CASE WHEN 学生 = 戊 TNEN 身高 ELSE 0 END) 戊
FROM XX班 GROUP BY 班级
第二种sql语句, 感觉更好一点 ,
SELECT
*
FROM
(SELECT 班级,学生,身高 from XX班 )PIVOT (
SUM (身高) FOR 学生 IN (
'甲'甲,
'乙'乙,
'丙'丙
)
)
括号中的sql 是查询出 分组字段, 按照 班级分组, 学生和升高是需要行转列的
pivot后面的内容中 , 身高 字段 将作为行转列后的值, 学生字段,将作为行转列后的字段名,
'甲'甲 单引号中 甲 是为了获取对应行的值 , 后面的甲 是该值的字段名