當前位置:首頁 » 編程語言 » sql語句列轉行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句列轉行

發布時間: 2023-03-14 05:54:00

sql 列轉行

通用的方法用union,不同的資料庫可能有對應的方法,比如sqlserver的unpovit


select'A'key,Avaluefromtabname
union
select'B'key,Bvaluefromtabname
union
select'C'key,Cvaluefromtabname
union
select'D'key,Dvaluefromtabname
union
select'E'key,Evaluefromtabname

⑵ sqlserver 怎麼列轉行

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語句列轉行

我整理的行轉列的問題:

--創建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 列轉行

先建一張轉換後的表
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 怎麼將列改為行顯示

姓名 課程 分數

張三 語文 74

張三 數學 83

張三 物理 93

李四 語文 74

李四 數學 84

李四 物理 94

姓名 語文 數學 物理

李四 74 84 94

張三 74 83 93

select 姓名 as 姓名 ,

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 姓名
參照寫一下

⑹ SQL列轉行

用case when結構就行了
SELECT * FROM dbo.pvtCustOrders
SELECT custid,years,qty
from dbo.pvtCustOrders
unpivot(qty for years in([2002],[2003],[2004]))as up
GO

⑺ mysql列轉行(逗號分隔)

mysql查詢含逗號的數據,將逗號拆分為多行展示:

原始數據如下:

現在因為新的需求,需要將這些數據轉化為如下形式:

假設我們需要處理的表結構為:

使用如下sql語句即可實現需求:

查詢的主要思路為,原表與一個包含連續自增長欄位的表進行join,得到字元串分隔後的索引值,其中 length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1 語句獲得字元串逗號分隔之後得到的數據長度,兩表關聯之後,會得到相應行數的數據。比如,

在join之後會得到:

之後對查詢中的結果,使用substring_index方法進行截取,然後得到我們自己想要的數據。

⑻ 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