日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用case when进行行转列

發布時間:2025/7/25 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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进行行转列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。