資料庫的行列轉換
A. 資料庫行列互換的代碼
一個關於學科和分數的行列互換
行列互換
select id as 學號,max(case Stusu when '數學' then StuMarks end) as '數學',
max(case Stusu when '語文' then StuMarks end) as '語文',
max(case Stusu when '英語' then StuMarks end) as '英語',
Sum(StuMarks) as '總成績'
from Stu group by id
B. sql行列轉換
1> create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
2> Insert tb
3> Select '張三','語文',60 union all
4> Select '張三','數學',70 union all
5> Select '張三','英語',80 union all
6> Select '張三','物理',90 union all
7> Select '李四','語文',65 union all
8> Select '李四','數學',75 union all
9> Select '李四','英語',85 union all
10> Select '李四','物理',95
11> go
(8 行受影響)
1>
2> SELECT
3> *
4> FROM
5> tb
6> PIVOT(
7> SUM([分數])
8> FOR [課程] IN ([語文],[數學] )
9> ) tmp
10> go
姓名 語文 數學
---------- ----------- -----------
李四 65 75
張三 60 70
(2 行受影響)
好像沒有辦法,課程名字必須寫在 SQL 裡面。
FOR [課程] IN ([語文],[數學] )
C. sql 資料庫行列轉換
我提供一個思路,用游標一個個取數 + 動態拼接sql
declare @c1 varchar(50)
declare @c2 varchar(50)
declare @STR varchar(8000)
set @STR='select ''轉成一行'' '
DECLARE cs CURSOR --一行行取c1,c2存入變數 @c1,@c2
for select c1,c2 from TABLE1 --TABLE1 即為原表
open cs
fetch next from cs into @c1,@c2
while @@FETCH_STATUS =0
begin
set @STR = @STR + ','+@c1+' , '+@c2+''
end
set @STR = @STR + 『 into TABLE2 』
exec(@STR) --執行拼接的sql
Select * from TABLE2 --Table2中即為所需要的轉成一行的結果
這台電腦上沒有裝sql server。。這是用文本編輯出來的,可能運行時會報些錯,調整下應該就可以了
D. Oracle資料庫行列轉換
舉個例子給你:
SELECT id,
MAX(decode(cn, 'c1', cv, NULL)) AS c1,
MAX(decode(cn, 'c2', cv, NULL)) AS c2,
MAX(decode(cn, 'c3', cv, NULL)) AS c3
FROM t_row_col
GROUP BY id
ORDER BY 1;
MAX聚集函數也可以用sum、min、avg等其他聚集函數替代。
看有沒有啟發
E. sql資料庫把一列數據轉換成一行數據
這是一個典型的 行列轉換問題。這些數據應該有著統一的一列吧,例如:標識人員的身份證號碼之類的。方法別人博客中都很詳盡,我就不在此羅列了。 可檢索關鍵字 「SQL 行列轉換」或者看下面鏈接
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
http://hi..com/wrgcxfcoybinpur/item/90f388e2ec0f853286d9decc
F. SQL資料庫中錶行列轉換顯示
只有新創建一張表。CREATE TABLE t_row_col AS
SELECT id, 'c1' cn, c1 cv
FROM t_col_row
UNION ALL
SELECT id, 'c2' cn, c2 cv
FROM t_col_row
UNION ALL
SELECT id, 'c3' cn, c3 cv FROM t_col_row;
SELECT * FROM t_row_col ORDER BY 1,2;
G. 資料庫錶行列轉換
使用case when語句可以使用行轉列功能
H. SQL2008資料庫操作進行行列轉換
我覺得當你需要行列轉換的時候,有可能是數據模型不合理了。
需要考慮考慮是否應該把數據模型修改一下,
將一行多欄位的表形式直接變成多行的表形式。
I. SQL行列轉置
declare @sql varchar(8000)
declare @date varchar(20)
declare @bmbh varchar(20)
declare @ckbh varchar(20)
set @date='20110101'
set @bmbh='500103'
set @ckbh='0601'set @sql = 'select max(lsbmzd_bmmc) as bmmc,kcrkd2_wlbh as wlbh,max(lswlzd_wlmc) as wlmc,max(lswlzd_ggxh) as ggxh ,sum(kcrkd2_sssl) as sum'
select @sql = @sql + ', max(case kcrkd1_kcywrq when ''' + kcrkd1_kcywrq + ''' then kcrkd2_sssl else 0 end) [' + kcrkd1_kcywrq + ']'
from (select distinct kcrkd1_kcywrq from kcrkd1
where kcrkd1_kcywrq>= substring(convert(varchar(100),dateadd(mm,-1,Convert(DateTime,@date)),112),1,6)+'26'
and kcrkd1_kcywrq<=substring(@date,1,6)+'25') as a
set @sql = @sql + ' from kcrkd1,kcrkd2,lswlzd,lsbmzd
where kcrkd1_lsbh=kcrkd2_lsbh and kcrkd1_pjlx=''j'' and kcrkd1_ckbh='''+@ckbh+''' and kcrkd1_bmbh=lsbmzd_bmbh and kcrkd2_wlbh=lswlzd_wlbh and kcrkd1_bmbh='''+@bmbh+'''
group by kcrkd2_wlbh'
exec(@sql)
J. 寫sql,怎麼將查詢結果的行列轉換呀
有意思的問題 給出一個參考的URL: 假設你表是這樣的結構部件 入庫日期 入庫數量 A 1/1 10 A 1/1 5 A 1/2 10 B 1/5 10 其實就是兩種方法,假設你的資料庫是11以前的,只能先定義好查哪天到哪天 然後那麼 selct 部件, sum( decode(入庫日期=1號,入庫數量,0), sum( decode(入庫日期=2號,入庫數量,0), 以此類推 from 入庫表 group BY 部件(原理上就是將不是這天的變成0,再合計)要是Oracle資料庫是11的話,就簡單了,直接pivot搞定 pivot語法就不說了,網上一堆一堆的 ~