日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用 case when进行行列转换

發(fā)布時(shí)間:2024/8/26 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 case when进行行列转换 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
固定列數(shù)的行列轉(zhuǎn)換
??如表結(jié)構(gòu)為: ? ??
?? ? 如?
Name ? subject score?
---------------------------?
張三 ? 語(yǔ)文 ? 80?
張三 ? 數(shù)學(xué) ? 70?
張三 ? 英語(yǔ) ? 60?
李四 ? 語(yǔ)文 ? 90?
李四 ? 數(shù)學(xué) ? 80?
李四 ? 英語(yǔ) ? 100?
....
?? ?轉(zhuǎn)換為 :
?? ? ? ? ? ? ? 語(yǔ)文 ? 數(shù)學(xué) ? 英語(yǔ)?
?? ? ? 張三 ? ?80 ? ? 70 ? ? 60?
?? ? ? 李四 ? ?90 ? ? 80 ? ?100?
要求:創(chuàng)建表,源表,表名: Stu , 只用一句sql 得到轉(zhuǎn)換結(jié)果。
解答:
方法一 :通過(guò)生成臨時(shí)表的方式操作
select name ,sum(yw) as '語(yǔ)文',sum(sx) ?as '數(shù)學(xué)',sum(wy) as '英語(yǔ)'
from(?
select name ,?
CASE subject WHEN '語(yǔ)文' THEN score END AS yw,?
CASE subject WHEN '數(shù)學(xué)' THEN score END AS sx,?
CASE subject WHEN '英語(yǔ)' THEN score END AS wy?
from ?Stu?
) tempStu
group by name
方法二:課程只有語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程則可以使用靜態(tài)sql 來(lái)實(shí)現(xiàn) ?Sql2000
select name as 姓名,?
??max(case subject when '語(yǔ)文' then score else 0 end) 語(yǔ)文,?
??max(case subject when '數(shù)學(xué)' then score else 0 end) 數(shù)學(xué),?
??max(case subject when '英語(yǔ)' then score else 0 end) 英語(yǔ)
from Stu?
group by name
方法三:如果課程不止語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程 則可以使用動(dòng)態(tài)sql 來(lái)實(shí)現(xiàn)
?? ? ? 創(chuàng)建一個(gè)用戶(hù)變量,使用簡(jiǎn)單的T-SQL來(lái)實(shí)現(xiàn)。 Sql2000
declare @sql varchar(8000) ? ? --聲明一個(gè)變量
set @sql = 'select name as 姓名'?
select @sql = @sql + ' , max(case subject when ''' + subject+ ''' then score ?else 0 end) [' + subject+ ']'?
from (select distinct subject from Stu) as a?
set @sql = @sql + ' from Stu group by name'?
print @sql ? --打印生成的sql
exec(@sql) ? --執(zhí)行該sql
??注:?case when的作用就是一個(gè)條件選擇語(yǔ)句,根據(jù)不同的要求顯示不同的內(nèi)容,格式是這樣的case
?????? when [選擇條件]
?????? then [結(jié)果1]
?????? else [結(jié)果2]
?????? end
?? 其中[選擇條件]也可以放在case之后。
CASE WHEN語(yǔ)句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型數(shù)據(jù)庫(kù)都受到支持,是標(biāo)準(zhǔn)的SQL語(yǔ)句.

總結(jié)

以上是生活随笔為你收集整理的使用 case when进行行列转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。