sql實現行列轉換,sql實現行列

來源:互聯網
上載者:User

sql實現行列轉換,sql實現行列


姓名 科目 成績
牛芬 語文 81
牛芬 數學 88
牛芬 英語 84
張三 語文 90
張三 數學 98
張三 英語 90

(表一)

現有一個表如(表一)

姓名 語文 數學 英語
牛芬 81 88 84
張三 90 98 90
(表二)

想要轉換為(表二)

sql:select  stuName as 姓名,chinese as 語文,math as 數學,english as 英文 from(

select sutName,

case subject when chinese then score end as chinese,

case subject when math then score end as math,

case subject when english then score end as english

from table) as tmp

group by stuName


若要把(表二)轉換成(表一)

postgresql裡面有個unnest函數可以使用:

select stuName,unnest(array['chinese','math','english']) as subject,unnest(array[chinest,math,englist]) as score from table group by stuName

就這麼簡單


SQL行列轉換

第一種:
select [姓名]=max([姓名]), 數學=sum(case when [課程]='數學' then [分數] else 0 end),物理=sum(case when [課程]='物理' then [分數] else 0 end),英語=sum(case when [課程]='英語' then [分數] else 0 end),語文=sum(case when [課程]='語文' then [分數] else 0 end) from tb group by [姓名]
第二種:
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql+[課程]+'=sum(case when [課程]='''+[課程]+''' then [分數] else 0 end),' from (SELECT DISTINCT [課程] FROM TB) A
set @sql = left(@sql,len(@sql) - 1)
set @sql = 'select [姓名]=max([姓名]), '+@sql+' from tb group by [姓名] '
exec (@sql)
 
急:SQL語句進行行列轉換

你的這種變化貌似是毫無意義的,或許 你想要的變換時下面的這種情況吧。
******原來的縱表tb*****
學號 科目 成績
1001 語文 90
1001 數學 80
1001 英語 70
1002 語文 95
1002 數學 85
1002 英語 75

*****目標的橫表*****
學號 語文 數學 英語 總分
1001 90 80 70 240
1002 95 85 75 255

sql語句:
select 學號 as '學號',
sum(case 科目 when '語文' then 成績 else 0 end) as '語文',
sum(case 科目 when '數學' then 成績 else 0 end) as '數學',
sum(case 科目 when '英語' then 成績 else 0 end) as '英語',
sum(case when 科目!='' then 成績 end) as '總分'
from tb
group by 學號
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.