當前位置:首頁 » 編程語言 » sql把行變成列

sql把行變成列

發布時間: 2022-07-07 04:32:28

sql語句行轉列

根據樓主的描述,特為樓主總結如下,在SqlServer裡面行列轉換的語法一般是: select 欄位, sum(case when 要轉換的行單元格的欄位名='行欄位內容' then 聚合的欄位名 end ) as 自定義的列標題1 from 表的名字 group by 欄位(注意,分組聚合就是根據這個欄位來的,具體到樓主的問題,這里的欄位就應該是org_id) 如果有多個列,之間用逗號隔開就可以了,最後一個參數和from之間不要用逗號。 具體到樓主的顯示效果就可以這樣寫了。代碼參考如下: Select org_id , sum(case when channel ='團險' then PREM end) As '團險保費' , sum(case when channel ='個險' then PREM end) As '個險保費 From 你的表名 Group By org_id

㈡ sql語句行轉列 怎麼轉啊

--聲明變數

declare@sqlvarchar(1000),@num_dataint,@num_allvarchar(2000),@num_numint,@table_sqlvarchar(2000)

set@num_num=0

--判斷並創建表

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[records]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[records]

createtablerecords(

[id]int,

[name]varchar(50),

[sex]varchar(10),

[num]int

)

--插入數據

insertintorecordsvalues(1,'tom','男',2)

insertintorecordsvalues(1,'tom','男',3)

insertintorecordsvalues(1,'tom','男',4)

insertintorecordsvalues(1,'tom','男',5)

--全選表中數據

select*fromrecords

--全選num列數據

selectnumas'數據'fromrecords

--釋放游標

deallocateselect_num

--為『selectnumfromrecords』建立游標

declareselect_numscrollcursorforselectnumas'shuju'fromrecords

--打開游標

openselect_num

--獲得第一條數據

fetchnextfromselect_numinto@num_data

set@num_all=convert(varchar,@num_data)+','

set@num_num=@num_num+1;

--如果獲取成功,繼續獲得數據

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@num_num=@num_num+1;

set@num_all=@num_all+convert(varchar,@num_data)+','

end

--關閉游標

closeselect_num

print@num_num

--set@num_num=@num_num-1;

declare@iint

set@i=1

print@num_num

print@i

set@table_sql='createtablenumall(idint,namevarchar(50),sexvarchar(10)'

print@table_sql

while@num_num>=1

begin

set@table_sql=@table_sql+',num'+convert(varchar,@i)+'int'

set@num_num=@num_num-1;

set@i=@i+1

end

set@table_sql=@table_sql+')'

print@table_sql

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[numall]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[numall]

exec(@table_sql)

declare@insert_sqlvarchar(2000)

set@insert_sql='insertintonumallvalues(1,'+'''tom'','+'''男'''

print@insert_sql

openselect_num

--獲得第一條數據

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

--如果獲取成功,繼續獲得數據

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

end

set@insert_sql=@insert_sql+')'

print@insert_sql

exec(@insert_sql)

--insertintonumallvalues(1,'tom','男',2,3,4,5,5)

select*fromnumall

試試吧,數據雖然有點出入,但已經說明問題了!!!

㈢ sql怎樣將行的值變為列,,,,

方法/步驟

  • 首先我們建立一張表,名為RToC,各個欄位的設計如下圖,分別是name,course,score,表示姓名,成績與分數,如圖所示。

  • 通過以上幾個步驟,我們就可以輕松的實現行列轉換了。同樣,我們如果要把列轉換成行, 應該怎麼做呢?同樣我們可以採用unpivot函數輕松實現。

㈣ sql 行變成列

declare@snvarchar(4000)
select@s=isnull(@s+',','')+quotename(Name)
fromsyscolumnswhereID=object_id('aa')
orderbyColid
exec('selectid,namefromaaunpivot(nameforidin('+@s+'))b')

如圖:

㈤ SQL語句,行變列,請高手指點

樓主,你好!SQL行列轉換我有參照過別人的,現在貼出來給你看看。

/*
標題:普通行列轉換(version2.0)
作者:愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開)
時間:-03-09
地點:廣東深圳
說明:普通行列轉換(version1.0)僅針對sqlserver2000提供靜態和動態寫法,version2.0增加sqlserver2005的有關寫法。

問題:假設有張學生成績表(tb)如下:
姓名課程分數
張三語文74
張三數學83
張三物理93
李四語文74
李四數學84
李四物理94
想變成(得到如下結果):
姓名語文數學物理
----------------
李四748494
張三748393
-------------------
*/

createtabletb(姓名varchar(10),課程varchar(10),分數int)
insertintotbvalues('張三','語文',74)
insertintotbvalues('張三','數學',83)
insertintotbvalues('張三','物理',93)
insertintotbvalues('李四','語文',74)
insertintotbvalues('李四','數學',84)
insertintotbvalues('李四','物理',94)
go

--SQLSERVER2000靜態SQL,指課程只有語文、數學、物理這三門課程。(以下同)
select姓名as姓名,
max(case課程when'語文'then分數else0end)語文,
max(case課程when'數學'then分數else0end)數學,
max(case課程when'物理'then分數else0end)物理
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')

---------------------------------

/*
問題:在上述結果的基礎上加平均分,總分,得到如下結果:
姓名語文數學物理平均分總分
--------------------------
李四74849484.00252
張三74839383.33250
*/

--SQLSERVER2000靜態SQL。
select姓名姓名,
max(case課程when'語文'then分數else0end)語文,
max(case課程when'數學'then分數else0end)數學,
max(case課程when'物理'then分數else0end)物理,
cast(avg(分數*1.0)asdecimal(18,2))平均分,
sum(分數)總分
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+',cast(avg(分數*1.0)asdecimal(18,2))平均分,sum(分數)總分fromtbgroupby姓名'
exec(@sql)

--SQLSERVER2005靜態SQL。
selectm.*,n.平均分,n.總分from
(select*from(select*fromtb)apivot(max(分數)for課程in(語文,數學,物理))b)m,
(select姓名,cast(avg(分數*1.0)asdecimal(18,2))平均分,sum(分數)總分fromtbgroupby姓名)n
wherem.姓名=n.姓名

--SQLSERVER2005動態SQL。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+',','')+課程fromtbgroupby課程
exec('selectm.*,n.平均分,n.總分from
(select*from(select*fromtb)apivot(max(分數)for課程in('+@sql+'))b)m,
(select姓名,cast(avg(分數*1.0)asdecimal(18,2))平均分,sum(分數)總分fromtbgroupby姓名)n
wherem.姓名=n.姓名')

droptabletb

------------------
------------------

/*
問題:如果上述兩表互相換一下:即表結構和數據為:
姓名語文數學物理
張三74
李四74
想變成(得到如下結果):
姓名課程分數
------------
李四語文74
李四數學84
李四物理94
張三語文74
張三數學83
張三物理93
--------------
*/

createtabletb(姓名varchar(10),語文int,數學int,物理int)
insertintotbvalues('張三',74,83,93)
insertintotbvalues('李四',74,84,94)
go

--SQLSERVER2000靜態SQL。
select*from
(
select姓名,課程='語文',分數=語文fromtb
unionall
select姓名,課程='數學',分數=數學fromtb
unionall
select姓名,課程='物理',分數=物理fromtb
)t
orderby姓名,case課程when'語文'then1when'數學'then2when'物理'then3end

--SQLSERVER2000動態SQL。
--調用系統表動態生態。
declare@sqlvarchar(8000)
select@sql=isnull(@sql+'unionall','')+'select姓名,[課程]='+quotename(Name,'''')+',[分數]='+quotename(Name)+'fromtb'
fromsyscolumns
wherename!=N'姓名'andID=object_id('tb')--表名tb,不包含列名為姓名的其它列
orderbycolidasc
exec(@sql+'orderby姓名')

--SQLSERVER2005動態SQL。
select姓名,課程,分數fromtbunpivot(分數for課程in([語文],[數學],[物理]))t

--SQLSERVER2005動態SQL,同SQLSERVER2000動態SQL。

--------------------
/*
問題:在上述的結果上加個平均分,總分,得到如下結果:
姓名課程分數
----------------
李四語文74.00
李四數學84.00
李四物理94.00
李四平均分84.00
李四總分252.00
張三語文74.00
張三數學83.00
張三物理93.00
張三平均分83.33
張三總分250.00
------------------
*/

select*from
(
select姓名as姓名,課程='語文',分數=語文fromtb
unionall
select姓名as姓名,課程='數學',分數=數學fromtb
unionall
select姓名as姓名,課程='物理',分數=物理fromtb
unionall
select姓名as姓名,課程='平均分',分數=cast((語文+數學+物理)*1.0/3asdecimal(18,2))fromtb
unionall
select姓名as姓名,課程='總分',分數=語文+數學+物理fromtb
)t
orderby姓名,case課程when'語文'then1when'數學'then2when'物理'then3when'平均分'then4when'總分'then5end

droptabletb

希望能幫助到你

㈥ sql 行轉列

SELECT
*
FROM ( 你的SQL 放在這裡面
) bb PIVOT( MAX(timePoint) FOR PName( [pm2.5], [nox], [.....] ) ) AS pvt

[pm2.5],這種你有一個要列一個。

㈦ 怎樣實現sql行轉列

--試一試。。。

createtable#test
(
姓名nvarchar(10),
學號nvarchar(10),
題號nvarchar(10),
答案nvarchar(10)
)
go
insertinto#test
select'張三','001','1','A'unionall
select'張三','001','2','C'unionall
select'李四','002','1','B'unionall
select'李四','002','2','D'

select*from#test

dECLARE@sqlVARCHAR(max)
SET@sql=''
SELECT@sql=@sql+',['+題號+']'FROM#testGROUPBY題號
SET@sql=STUFF(@sql,1,1,'')
SET@sql='select*from#testpivot(max(答案)for題號in('+@sql+'))a'
PRINT@sql
exec(@sql)

㈧ sql如何把行數據變為列數據

2種方法,一種寫個sql 函數,另一種是在程序裡面逐行來讀取拼接,感覺是第二種簡單點

㈨ sql行轉列

SELECT e.NAME as name,
count(case when DATEPART(year,c.START_TIME)=2014 then 1 else null end ) as count2014,
count(case when DATEPART(year,c.START_TIME)=2015 then 1 else null end ) as count2015
from ENVI_DATA_STATISTIC_COMP c
LEFT JOIN ENVI_CITY e on e.CITY_ID=c.CITY_ID
where c.COMP_NAME like '%藍天白雲%' and INDEX_TYPE='12'
and (c.START_TIME like '%2014-08%' or c.START_TIME like '%2015-08%' ) and STATISTIC_TYPE='1' and c.VALID_FLAG='1'
group by name

應該是醬紫的,使用case when 轉換~

㈩ SQL 行轉列

我這里兩種都給你介紹,行轉列和列轉行:

列轉行——

錄入經營范圍時候會遇到列傳行的問題解決方案如下:

在temp1 表有一下欄位內容:

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:433
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:744
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:147
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:240
java駝峰 發布:2025-02-02 09:13:26 瀏覽:652
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726