行转列问题,想很久了,没有思路,请各位大哥解答,谢谢

jackbaby 2005-05-10 04:38:26
表结构入下:

A1 A2
test zz
test2 kk
te mm
. .
. .
. .

很多条记录,而且A1和A2是关联的数据

下面要转成

A1 test test2 te . . .
A2
zz
kk
mm
.
.
.

的数据表现格式,因为这样的话,在报表中的显示就会行和列的对应显示,但是很郁闷的是,想半天没有结果,请各位大哥帮忙了,谢谢了,谢谢
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
talantlee 2005-05-10
  • 打赏
  • 举报
回复
--行列轉換問題-
----建立測試環境
drop table tablea

declare @s nvarchar(4000)
set @s=''
select @s=@s+','
+'max(case when a= '''+a +''' then b end)' +' as ' +quotename(a)--max可改sum,min
from (select distinct a from tablea)T
set @s=stuff(@s,1,1,'')
set @s='select a,'+@s+' from tablea group by a'
exec (@s)

--測試結果結果
name aan ab ac an dn
lick 2 NULL NULL 6 NULL
lick3 NULL NULL 4 NULL NULL
lick4 NULL NULL NULL 3 NULL
lick5 NULL NULL NULL 3 NULL
lick6 NULL 5 NULL NULL NULL
lick7 NULL NULL NULL NULL 3
lick8 NULL NULL NULL 6 NULL

-------存儲過程----
CREATE proc ColTorow
as
set nocount on
declare @s nvarchar(4000)
set @s=''
select @s=@s+','+a --quotoname(a)
+'=isnull(rtrim(max(case when a= ' ----max可改成sum

+ QUOTENAME(a,'''')
+' then b end)),'''')'---isnull(a,'')函數----在這樣修改可改成你想要的
---- +' then b end)),''AA'')'
from tablea group by a
exec('select name '+@s+' from tablea group by name')
GO
----調用
ColTorow
----------------結果
name aan ab ac an dn
lick 2 3
lick3 4
lick4 3
lick5 3
lick6 5
lick7 3
lick8 6
----刪除測試環境
drop table tablea
drop proc coltorow

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧