sql行列轉換


  • 首先我們建立一張表,名為scoreInfo,各個字段的設計如下圖,分別是name,course,score,表示姓名,成績與分數,如圖所示。
  • 2

    我們往表中加入數據,分別添加小明與小花的語文和數學成績,如圖所示。

  • 3

    接下來,我們要進行行列轉換,列應該是name,語文,數學。我們首先要考慮是如何得到列名,我們可以通過分組得到課程名稱。如圖所示,我們通過分組語句,從查詢結果我們可以看出課程名的拼接字符串。

    代碼:

    declare @sql varchar(200)
    select @sql=ISNULL(@sql+',','')+course from scoreInfo group by course
    select @sql

    效果:

  • 4

    接下來,關鍵的行轉列的函數pivot出場了,通過這個函數我們把分數填充到轉換的列語文、數學的列值。

    declare @sql varchar(200)
    select @sql=ISNULL(@sql+',','')+course from scoreInfo group by course
    set @sql='select * from scoreInfo pivot(max(score) for course in ('+@sql+')) pivotTable'  
    exec(@sql)
  • 5

    我們運行后,可以得到行轉列的結果,如下圖所示。

  • 6

    通過以上幾個步驟,我們就可以輕松的實現行列轉換了。同樣,我們如果要把列轉換成行, 應該怎么做呢?同樣我們可以采用unpivot函數輕松實現。

    declare @sql varchar(200)
    select @sql=ISNULL(@sql+',','')+course from scoreInfo group by course
    set @sql='select * from scoreInfo pivot(max(score) for course in ('+@sql+')) pivotTable unpivot(Score for Course in('+@sql+')) unPivotedTable'  
    exec(@sql)

    通過上面的sql語句,如下圖所示:


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM