sql列變行
⑴ sql 列轉行
先建一張轉換後的表
create table changed
(
id number,
key varchar2(10),
val varchar2(10)
)
然後執行下面的插入語句
insert all
into changed(id,key,val) values(id,'a',a)
into changed(id,key,val) values(id,'b',b)
into changed(id,key,val) values(id,'c',c)
into changed(id,key,val) values(id,'d',d)
into changed(id,key,val) values(id,'e',e)
select id,a,b,c,d,e from change;
如果需要繼續添加,就模仿上面的格式寫好了,最後別忘記commit;
⑵ sql把列變成行
可以用pivot table
⑶ sql語句列轉行
我整理的行轉列的問題:
--創建tb表
createtabletb(姓名varchar(10),課程varchar(10),分數int)
insertintotbvalues('張三','語文',74)
insertintotbvalues('張三','數學',83)
insertintotbvalues('張三','物理',93)
insertintotbvalues('李四','語文',74)
insertintotbvalues('李四','數學',84)
insertintotbvalues('李四','物理',94)
go
select*Fromtb
--SQLSERVER2000靜態行轉列
select姓名as姓名,
max(case課程when'語文'then分數elsenullend)語文,
max(case課程when'數學'then分數elsenullend)數學,
max(case課程when'物理'then分數elsenullend)物理
fromtb
groupby姓名
--SQLSERVER2000動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare@sqlvarchar(8000)
set@sql='select姓名'
select@sql=@sql+',max(case課程when'''+課程+'''then分數else0end)['+課程+']'
from(selectdistinct課程fromtb)asa
set@sql=@sql+'fromtbgroupby姓名'
exec(@sql)
--SQLSERVER2005靜態SQL。
select*from(select*fromtb)apivot(max(分數)for課程in(語文,數學,物理))b
--SQLSERVER2005動態SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'],[','')+課程fromtbgroupby課程
set@sql='['+@sql+']'
exec('select*from(select*fromtb)apivot(max(分數)for課程in('+@sql+'))b')
希望對你的學習有幫助。
⑷ 如何把Sql的列值變成行值
比如:有張學生成績表(tb)如下:
Name Subject Result
張三 語文74
張三 數學83
張三 物理93
李四 語文74
李四 數學84
李四 物理94
代碼如下:
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values(張三 , 語文 , 74)
insert into tb(Name , Subject , Result) values(張三 , 數學 , 83)
insert into tb(Name , Subject , Result) values(張三 , 物理 , 93)
insert into tb(Name , Subject , Result) values(李四 , 語文 , 74)
insert into tb(Name , Subject , Result) values(李四 , 數學 , 84)
insert into tb(Name , Subject , Result) values(李四 , 物理 , 94)
go
⑸ sql資料庫把一列數據轉換成一行數據
這是一個典型的 行列轉換問題。這些數據應該有著統一的一列吧,例如:標識人員的身份證號碼之類的。方法別人博客中都很詳盡,我就不在此羅列了。 可檢索關鍵字 「SQL 行列轉換」或者看下面鏈接
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html
http://hi..com/wrgcxfcoybinpur/item/90f388e2ec0f853286d9decc
⑹ sql語句列轉行
--方法對了,其實超級容易,下面給你一個例子,實際的請自己改寫一下,以下代碼可以在sql server中執行,返回的就是你要的結果
--將你的數據存入表
declare @a table(ii varchar(10),jj varchar(10))
insert into @a values('c_003','套餐A')
insert into @a values('c_004','49')
insert into @a values('c_005','300')
insert into @a values('c_003','套餐B')
insert into @a values('c_004','59')
insert into @a values('c_005','700')
--檢索一下,看是否是正確的
select * from @a
--將數據行做成列表
declare @b table(c_003 varchar(10),c_004 varchar(10),c_005 varchar(10))
--定義游標完成數據轉換
declare cur_a_b cursor for select ii,jj from @a
declare @i int --定義步長,方便以3為不同的步長
set @i=0
declare @ii varchar(10)
declare @jj varchar(10)
--臨時的c_003變數
declare @fn varchar(20)
--打開游標
open cur_a_b
fetch next from cur_a_b into @ii,@jj
while @@fetch_status = 0
begin
if @i % 3 = 0
begin
set @fn = @jj
insert into @b(c_003) values(@fn)
end
if @i % 3 = 1 update @b set c_004=@jj where c_003=@fn
if @i % 3 = 2 update @b set c_005=@jj where c_003=@fn
set @i = @i + 1
fetch next from cur_a_b into @ii,@jj
end
close cur_a_b
deallocate cur_a_b
--最終結果
select * from @b
--呵呵,寫了這么多也不容易,加點分吧
⑺ sql 查詢出一列內容,如何讓它成一行顯示。
進行行轉列下面是相關語法等
PIVOT 用於將列值旋轉為列名(即行轉列),在 SQL Server 2000可以用聚合函數配合CASE語句實現
PIVOT 的一般語法是:PIVOT(聚合函數(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的語法,使用需修改資料庫兼容級別(在資料庫屬性->選項->兼容級別改為 90 )
SQL2008 中可以直接使用
完整語法:
table_source
PIVOT(
聚合函數(value_column)
FOR pivot_column
IN(<column_list>)
)
View Code
UNPIVOT 用於將列明轉為列值(即列轉行),在SQL Server 2000可以用UNION來實現
完整語法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
⑻ SQL語句 列轉行
-- ========================= PIVOT 行列轉置 ===========================
-- 1、【行列轉置PIVOT】
declare @Score table(StuNo varchar(10), StuName varchar(50), CourseName varchar(50), Score int)
insert into @Score
select '1', 'Tom', 'Math', 80 union all
select '1', 'Tom', 'English', 82 union all
select '1', 'Tom', 'Geography', 84 union all
select '2', 'Jone', 'Math', 79 union all
select '2', 'Jone', 'English', 88 union all
select '2', 'Jone', 'Geography',86
select * from @Score
SELECT StuNo, StuName, Math, English, [Geography]
FROM @Score PIVOT (MAX(Score) FOR CourseName in (Math, English, [Geography]) ) AS ScoreList
ORDER BY StuNo
-- 2、【列行轉置UNPIVOT】
declare @ScoreList table(StuNo varchar(10), StuName varchar(50), Math int, English int, [Geography] int)
insert into @ScoreList
select '1', 'Tom', 80, 82, 84 union all
select '2', 'Jone', 79, 88, 86
select * from @ScoreList
SELECT StuNo, StuName, CourseName, Score
FROM @ScoreList UNPIVOT (Score FOR CourseName in (Math, English, [Geography]) ) AS ScorePvtTable
ORDER BY StuNo
⑼ SQL語句如何列變行
select 欄位名按照你要求的排序就行了
select a,b,c from tableName 那麼輸出就是 abc對應的順序
⑽ sql語句怎麼把列變成行
create table rotatetable1 (序號 int,company char(66),box_weight char(12),廢塑料numeric(10,2)),廢五金 numeric(10,2)),廢鋼鐵 numeric(10,2)),廢紙 numeric(10,2)),廢有色 numeric(10,2)),廢纖維 numeric(10,2)),其它 numeric(10,2)),合計 numeric(10,2)));
insert into rotatetable1(company,box_weight) select name ,'weight' from sum1 group by name;
insert into rotatetable1(company,box_weight) select name ,'box' from sum1 group by name;
update rotatetable1 set 廢塑料=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='廢塑料';
update rotatetable1 set 廢塑料=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='廢塑料';
::: :::
update rotatetable1 set 其它=box from sum1as a where a.name=rotatetable1.company and box_weight='box' and hsname='其它';
update rotatetable1 set 其它=weight from sum1as a where a.name=rotatetable1.company and box_weight='weight' and hsname='其它';
::: :::
update rotatetable1 set 合計=廢塑料+廢五金+廢鋼鐵+廢紙+廢有色+廢纖維+其它;
(所有涉及表的行列轉換均可按照這種方式實現。)