SQLServer如何處理資料集的維度變化

來源:互聯網
上載者:User

標籤:style   color   io   資料   art   ar   size   sql   

Student表有三列,分別是姓名、課程、成績
Name Curricula Mark
張三 語文 70
李四 數學 80
王朝 英語 59
城南 馬哲 70
王朝 語文 90


我想得到的效果是,列出各個學科及格的人名:
語文 化學 數學
張三 李四
王朝

學科不止3門,可能有八門怎麼弄呢?其實這就是典型的維度方向變化.

 

準備資料:

create table stgrade(Name varchar(10), Curricula varchar(10) , Mark int);
go
insert into stgrade values(‘張三‘ , ‘語文‘,‘70‘ );
insert into stgrade values(‘李四‘ , ‘數學‘,‘80‘);
insert into stgrade values(‘王朝‘ , ‘英語‘,‘59‘);
insert into stgrade values(‘城南‘ , ‘馬哲‘,‘70‘ );
insert into stgrade values(‘王朝‘ , ‘語文‘,‘90‘ );
go

select * from stgrade;

NameCurriculaMark
張三語文70
李四數學80
王朝英語59
城南馬哲70
王朝語文90

用case when 來實現根據column的值來返回同一行別的column的值,因為我們這裡不需要分數,只關心Curricula 和name,所以是在分數賽選過後,進行一個case when操作.

select
case when Curricula=‘語文‘ then name end 語文,
case when Curricula=‘數學‘ then name end 數學,
case when Curricula=‘英語‘ then name end 英語,
case when Curricula=‘馬哲‘ then name end 馬哲
from stgrade where mark>59

 

語文 數學 英語 馬哲
張三NULLNULLNULL
NULL李四NULLNULL
NULLNULLNULL城南
王朝NULLNULLNULL

又上面已經可以看到結果集合已經初具雛形了,要是更讓每個column下的NULL消失,然後後面行的值補上來就能達到我們的要求了。

select
case when Curricula=‘語文‘ then name end 語文,
case when Curricula=‘數學‘ then name end 數學,
case when Curricula=‘英語‘ then name end 英語,
case when Curricula=‘馬哲‘ then name end 馬哲,
sn
from
(
select curricula,name,mark,
row_number() over(partition by curricula order by name) sn
from stgrade where mark>59
) t

語文數學英語馬哲sn
NULLNULLNULL城南1
NULL李四NULLNULL1
王朝NULLNULLNULL1
張三NULLNULLNULL2

select sn,
max(case when Curricula=‘語文‘ then name end) 語文,
max(case when Curricula=‘數學‘ then name end) 數學,
max(case when Curricula=‘英語‘ then name end) 英語,
max(case when Curricula=‘馬哲‘ then name end) 馬哲
from
(
select curricula,name,mark,
row_number() over(partition by curricula order by name) sn
from stgrade where mark>59
) t
group by sn

sn語文數學英語馬哲
1王朝李四NULL城南
2張三NULLNULLNULL

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.