今天來幹一票大的,這是一個在小有用處的一個函數,它的用途是行轉列。他就是 pivot 函數,語法是
select *
from
(
SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN
(SELECT objid FROM T_MyAttention tma GROUP BY objid ORDER BY count(1) DESC)
GROUP BY objid,action
) t
pivot ( sum(count) for t.action in ([1],[2],[3],[4])) as ourpivot
它的效果就會變成這個樣子,那麼他在sqlsever中存在,mysql中是否存在呢?
我相信大家心中肯定有答案了,那就是否定的
哈哈哈,不然我寫這篇文章幹嘛,mysql中不僅不存在 pivot這個函數,還沒有類似的這種函數,全憑自定義。那麼在這裡我自定義的是配合了mybatis的foreach循環展示的一種,也同樣是行轉列,其實怎麼說,它這個也算是寫死了,我的也類似。
首先他pivot裡面是一個 sum函數 ,那麼我們也是sum函數開頭,*表示其他列(我就不多寫了),這裡就用到了昨天所說的ifull函數,想必大家還沒有忘記吧
select *,SUM(CASE t.action when '參數(一般是傳過來的參數)就如例題寫的 1' then ifnull(t.count , '') else null end )as 『參數(一般是傳過來的參數)就如例題寫的 1』
然後就是你要多少行轉列就寫多少行這個SUM(),sqlserver只是把它整合到一起了,而如果是採用mybatis就可以foreach循環輸出,上面模板也提到了,參數就是傳參嘛
今天就到這裡了