這裡蒐索程式師資訊,查找有用的技術資料
當前位置:首頁 » 編程語言 » sql語句行轉列數據不變
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句行轉列數據不變

發布時間: 2022-05-15 04:29:43

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

最簡答的方法:使用程序數組,例如你現在的代碼是:
do while not rs.eof
response.write rs("....")
rs.movenext
end do

那麼可以下面這樣輸出:
'先為每個欄位定義數組
dim a(1)
dim b(1)
n=1
do while not rs.eof
a(n)=rs("a")
b(n)=rs("b")
'...有多少欄位寫多少行....
n=n+1
rs.movenext
end do
'下面再輸出
response.write "<table>";
response.write "<tr><td>" & join("<td>",a)
response.write "<tr><td>" & join("<td>",b)
response.write "</table>";

你的ASP程序不可能顯示多少條,一般每頁顯示20條左右,用數組在顯示的轉換是可行的。

Ⅲ 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語句類似行轉列的問題

select文件編號,版本號,count(*)as記錄條數
fromtablegroupby文件編號,版本號

是這樣?

Ⅳ sql語句列轉行

主要應用case語句來解決行轉列的問題
行轉列問題主要分為兩類
1)簡單的行轉列問題:
示例表:
id
sid
course
result
1
2005001
語文
80.0
2
2005001
數學
90.0
3
2005001
英語
80.0
4
2005002
語文
56.0
5
2005002
數學
69.0
6
2005002
英語
89.0
執行
select
sid,語文=isnull(sum(case
course
when
'語文'
then
result
end),0),
數學=isnull(sum(case
course
when
'數學'
then
result
end),0),
英語=isnull(sum(case
course
when
'英語'
then
result
end),0)
from
result
group
by
sid
order
by
sid
得出結果
sid
語文
數學
英語
2005001
80.0
90.0
80.0
2005002
56.0
69.0
89.0

Ⅵ SqlServer資料庫怎麼實現行轉列的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 行轉列問題

行轉列不應該使用sql來解決,可使用報表工具中的交叉表來實現
資料庫基本運算就是集合運算,解決行轉列不合適。
求採納為滿意回答。

Ⅷ sql語句列轉行的問題

sqlserver2005及以上版本

CREATETABLEtest(idINT,[USER_ID]VARCHAR(10),door_idVARCHAR(50))
INSERTINTOdbo.test
(id,USER_ID,door_id)
SELECT1,'U100174','0000000015;0000000018;;'
UNIONALL
SELECT2,'U120225','0000000023;'SELECTA.ID,USER_ID,B.door_id
FROM(
SELECTid,USER_ID,door_id=CONVERT(xml,'<root><v>'+REPLACE(door_id,';','</v><v>')+'</v></root>')FROMtest
)A
OUTERAPPLY(
SELECTdoor_id=N.v.value('.','varchar(100)')FROMA.door_id.nodes('/root/v')N(v)
)B
WHEREISNULL(b.door_id,'')<>''
結果:
1 U100174 0000000015
1 U100174 0000000018
2 U120225 0000000023

Ⅸ sql 行列轉換

我來說一下:
這個可以寫成一句普通的sql,你這寫的是動態sql,性能不如普通sql,並且欄位名「語文」、「數學」、「物理」,你還無法加上。
一句sql:select 姓名,『語文』=sum(case 課程 when 『語文』 then 分數 esle 0 end),『數學』=sum(case 課程 when 『數學』 then esle 0 分數 end),『物理』=sum(case 課程 when 『物理』 then esle 0 分數 end)from tb group by 姓名
這個其實和他們的差不多,你把這個理想了,你會覺得很簡單的,動態sql寫的挺復雜的,老實說,我都看不懂,我也懶得看。不理解的問我。
你記住這樣一句話:一列數據變成多列數據,用case語句;
一行數據變成多行數據,考慮自連接。

Ⅹ 求大神一sql語句,怎麼將下面的錶行轉列,按列綁定,在線等!求紅領巾幫忙


--行列轉換(列長度不大於255,行過多則無法進行轉換與資料庫機制相關)
create procere TransTable @TableName nvarchar(255)
as

declare @FlagNo int,@Rows int
create table ##tmp_table(ColName nvarchar(255))
declare @sql nvarchar(4000)

--以原來的列標題作為第一列數據
set @sql='insert into ##tmp_table
select name from syscolumns where id=(select max(id) from sysobjects where xtype=''u'' and name='''+@TableName+''')
'
exec sp_executesql @sql
set @FlagNo=1
set @sql='select @Count=COUNT(*) from '+@TableName
exec sp_executesql @sql,N'@Count int OutPut',@Rows Output
if ISNULL(@Rows,0)=0
begin
select * from ##tmp_table
drop table ##tmp_table
return
end
--列建立
set @FlagNo=1
while @FlagNo<=@Rows
begin
set @sql='
alter table ##tmp_table
add FColumn'+CAST(@FlagNo as nvarchar(10))+' nvarchar(255)'
exec sp_executesql @sql
set @FlagNo=@FlagNo+1
end
declare @ColName nvarchar(255)
declare cur cursor for
select ColName from ##tmp_table
open cur
fetch next from cur into @ColName
while @@FETCH_STATUS=0
begin
set @sql='
declare @FValue nvarchar(255)
declare @curFlag int
declare cur_value cursor for
select cast('+@ColName+' as nvarchar(255)) from '+@TableName+'
set @curFlag=1
open cur_value
fetch next from cur_value into @FValue
while @@FETCH_STATUS=0
begin
if @curFlag<='+CAST(@Rows as nvarchar(20))+'
exec TransTableUpdateValue '''+@ColName+''',@curFlag,@FValue

fetch next from cur_value into @FValue
set @curFlag=@curFlag+1
end
close cur_value
DEALLOCATE cur_value
'
--select @sql
exec sp_executesql @sql
fetch next from cur into @ColName
end
close cur
DEALLOCATE cur
select * from ##tmp_table
drop table ##tmp_table


--更新單元數據
create procere TransTableUpdateValue @ColName nvarchar(255),@FlagInt int,@value nvarchar(255)
as
declare @Sql nvarchar(1000)
set @Sql='
update ##tmp_table set FColumn'+CAST(@FlagInt as nvarchar(10))
+'='''+isnull(@value,'')+''' where ColName='''+@ColName+''''
--select @sql
exec sp_executesql @sql

execTransTable'你的表'--(行不能太多,因為每個列定義長度255,過長無法使用,sql,你知道的)