使用case when进行行转列
生活随笔
收集整理的這篇文章主要介紹了
使用case when进行行转列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們在應用中通常會遇到需要行轉列的情況。 比如一個成績表。表通常會這樣設計: 學生號 科目 成績 01????? 語文? 80 01????? 英語? 90 02????? 語文? 60 ........................ 然后可能客戶需要的是這樣的信息呈現: 學生號??? 語文?? 英語?? 數學? .... 01??????? 80???? 90???? 02??????? 60? ....................................... 這種情況我們就會需要行轉列。 使用case when來依條件分列是最簡單的一種方法。 select?學生號,?? sum(case?科目?when?'語文'?then?成績?end)?as?語文,?? sum(case?科目?when?'數學'?then?成績?end)?as?數學,?? ......?? from?table?? where?...?? group?by?學生號?? select 學生號, sum(case 科目 when '語文' then 成績 end) as 語文, sum(case 科目 when '數學' then 成績 end) as 數學, ...... from table where ... group by 學生號 然后當這種條件分支不清晰,轉換后列數不固定的情況下呢?對照上面的例子來說就是,假設我并不知道學生學了哪些科目的時候應該怎么做? 我們繼續用case when,但是由于列的不固定,需要先根據條件分支產生的可能性來拼接一下語句再動態執行。直接上碼看效果可能更清晰一點:declare?@sql?varchar(4000)?? set?@sql?=?'select?學生號'?? ?? select?@sql?=?@sql?+?',sum(case?科目?when?'''+科目+'''?then??成績?end)?['+科目+']'?? from?(select?distinct?科目?from?table??)?as?a?? order?by?科目?? ??? select?@sql?=?@sql+'?from?table??group?by?學生號'?? ?? --print?@sql?? exec(@sql)?
轉載于:https://www.cnblogs.com/gaotianle/archive/2010/02/20/1669812.html
總結
以上是生活随笔為你收集整理的使用case when进行行转列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有线路由器与无线路由器混合使用
- 下一篇: ASP.NET的SEO:HTTP报头状态