--測試
if object_id('[tb]') is not null drop table [tb]
gocreate table tb( student varchar(10),math int,class varchar(2), history int)
insert tb values('張三', 90 ,'a1', 90)
insert tb values('李四', 80 ,'a1', 89)
insert tb values('王五', 95 ,'a2', 85)
goselect factor,max(張三) as 張三 , max(李四) as 李四 , max(王五) as 王五 from
(select factor = 'math',
sort=1,
張三 = case when student = '張三' then convert(varchar(2),math) else '' end,
李四 = case when student = '李四' then convert(varchar(2),math) else '' end,
王五 = case when student = '王五' then convert(varchar(2),math) else '' end
from tb
union all
select factor = 'class' ,
sort=2,
張三 = case when student = '張三' then class else '' end,
李四 = case when student = '李四' then class else '' end,
王五 = case when student = '王五' then class else '' end
from tb
union all
select factor = 'history' ,
sort=3,
張三 = case when student = '張三' then convert(varchar(2),history) else '' end,
李四 = case when student = '李四' then convert(varchar(2),history) else '' end,
王五 = case when student = '王五' then convert(varchar(2),history) else '' end
from tb
) mgroup by factor,sort
order by sort
--結果
/*factor 張三 李四 王五
------- ---- ---- ----
math 90 80 95
class a1 a1 a2
history 90 89 85
(所影響的行數為 3 行)
Oracle行轉列 行變列
在寫一些複雜的sql的時候,經常需要使用到行變列的技巧,一些帳務系統的統計也經常會寫到這樣的sql。主要用到了max decode或nvl這些函式來達到目的。寫下來讓大家互相學習學習!下面是乙個行變列的例子。如表row2column2有以下資料 名字 課程 分數 1 張三 語文 80 2 張三 數學...
行轉列 列轉行
行轉列 select t.t.rowid from test1 t id c1 c2 c3 1 小紅 數學 10 2 小紅 語文 20 3 小欄 數學 15 4 小欄 語文 25 test1 oracle select c1,to char wm concat c2 c2 from test1 gr...
mysql列邊行 mysql 行轉列 列轉行
group concat 函式說明 手冊上說明 該函式返回帶有來自乙個組的連線的非null值的字串結果 通俗點理解,其實是這樣的 group concat 會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函式引數 就是欄位名 決定。分組必須有個標準,就是根據group by指定的列...