MySQL中行轉列是很常用的,本文給出了兩種行轉列的方法。
兩張表:
左表:product ,右表:cate
SQL語句:
第一種方法:IF()語句
SELECT cid,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM product GROUP BY cid;
第二種方法:CASE WHEN THEN ELSE END
SELECT cid,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM product GROUP BY cid;
兩者得到的結果一樣,如下:
當然也可以進行連表查詢使用,如下SQL:
方法一:
SELECT c.pname ,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id;
方法二:
SELECT c.pname ,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id
兩者得到的結果一樣,如下:
需要說明的地方:
方法二中的MAX()是爲了能夠使用GROUP BY根據cid進行分組,因爲每一個cd對應的 mon ='一月份' 的記錄只有一條,所以MAX()的值就等於對應那一條記錄的num的值。
假如cid='1' 和 mon ='一月份' 的記錄有兩條,則此時MAX() 的值將會是這兩條記錄中的最大的值,同理,使用SUM()就是求兩者的和。因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函數都可以達到行轉列的效果。
更多請看:https://www.caohongyuan.cn/article/74