1樓:匿名使用者
我來說一下:
這個可以寫成一句普通的sql,你這寫的是動態sql,效能不如普通sql,並且欄位名「語文」、「數學」、「物理」,你還無法加上。
一句sql:select 姓名,『語文』=sum(case 課程 when 『語文』 then 分數 esle 0 end),『數學』=sum(case 課程 when 『數學』 then esle 0 分數 end),『物理』=sum(case 課程 when 『物理』 then esle 0 分數 end)from tb group by 姓名
這個其實和他們的差不多,你把這個理想了,你會覺得很簡單的,動態sql寫的挺複雜的,老實說,我都看不懂,我也懶得看。不理解的問我。
你記住這樣一句話:一列資料變成多列資料,用case語句;
一行資料變成多行資料,考慮自連線。
2樓:匿名使用者
按照你的**式來講:可以自動轉成sql語句為:
select 姓名,max(case 課程 when '語文' then 分數 else 0 end) [' 語文' ],max(case 課程 when '數學' then 分數 else 0 end) [' 數學'],max(case 課程 when '物理' then 分數 else 0 end) [' 物理' ]
from tb group by 姓名
意思就是以姓名分組統計,各個姓名中該姓名的語文成績的最大值,數學成績的最大值,物理成績的最大值。字串中三個單引號代表一個單引號。
3樓:
我還有一解:
select a.姓名,b.語文,c.
數學,d.物理 from (select 姓名 from tb) a,(select 姓名,分數 from tb where 課程="語文") b,(select 姓名,分數 from tb where 課程="數學") c,(select 姓名,分數 from tb where 課程="物理") d where a.姓名=b.
姓名 and b.姓名=c.姓名 and c.
姓名=d.姓名
4樓:沙冰巧
名]), 數學=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關於行列轉換的問題,sql 關於行列轉換的一個問題
select 課程,sum 小明 as 小明 sum 張三 as 張三 from select 課程,case when 姓名 小明 and 課程 語文 then 分數 when 姓名 小明 and 課程 數學 then 分數 else 0 end as 小明 case when 姓名 張三 and...
sql語句 轉換大小寫問題,SQL語句 轉換大小寫問題
那你可以把首 來字元提取出來如自 declare it varchar 8 set it it prog select charindex it 1 取出p處在位置,就是你變大寫的位置 select lower it 轉化為小寫 select substring it,charindex it 1,...
SQL把查詢出的列轉換成行,SQL把查詢出的一個列轉換成行
看這裡,比較詳細 sql 如何把一列的值轉換成一行顯示 1 最原始的方法,利用 select.unionselect 欄位1 from 表名 where 條件 union select 欄位2 from 表名 where 條件 select 欄位3 from 表名 where 條件 2 利用 sys...