关于sql行转列的问题

llxxzj311 2008-11-13 01:30:25
id name pname
2 ff 啊啊
6 斯蒂芬 啊啊
4 间客房 反而更
7 哥哥 反而更
5 龙卷风 的身份二个
8 对方 的身份二个
我想把6,7,8 中的内容让它从数据库查出来就转换成一列怎么做
谢谢

...全文
336 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lee576 2008-11-13
  • 打赏
  • 举报
回复
上面select from 的表随便起了个名字,应该是你的

id name pname
2 ff bb
6 aa bb
4 cc hh
7 dd hh
5 ee jj
8 gg jj

这个表
lee576 2008-11-13
  • 打赏
  • 举报
回复
上面的写错了一个地方

declare @sql varchar(8000)
set @sql = 'select pname'
select @sql = @sql + ',sum(case name when '''+name+''' then cj end) ['+name+']'
from (select distinct name from test) as a
select @sql = @sql+' from test group by pname'
exec(@sql)
lee576 2008-11-13
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select pname'
select @sql = @sql + ',sum(case name when '''+km+''' then cj end) ['+name+']'
from (select distinct name from 你的表) as a
select @sql = @sql+' from test group by pname'
exec(@sql)
wojiaochenglong 2008-11-13
  • 打赏
  • 举报
回复
取出后先用变量先保存,经过合并,在列出来
llxxzj311 2008-11-13
  • 打赏
  • 举报
回复
你这个还是达不到我要的结果是这样显示的

id name pname
2 ff bb
6 aa bb
4 cc hh
7 dd hh
5 ee jj
8 gg jj

让他变成这样(从数据库里查出就是这样 显示 )


ff aa bb
cc dd hh
ee gg jj
lyp464686109 2008-11-13
  • 打赏
  • 举报
回复
gz
lee576 2008-11-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 llxxzj311 的回复:]
我这是两个表的内容你看以下结构
table1
id
name
table 2
id
pname
jjj
bbb

其中jjj,bbb分别代表talbe1中id 的内容
要求是让他们都显示出来 。jjj 和bbb对应的id字段的内容也都一块显示
刚才的问题就是显示的结果 。我想让jjj和bbb显示的结果分成两列
怎么弄
[/Quote]
不知道你是不是这个意思
select a.id,a.name,b.pname from table1 a left outer join table2 b on a.id=b.id
lee576 2008-11-13
  • 打赏
  • 举报
回复
刚才那个是通用存储过程喔,你都不看我发的东西

RowToColumn '要转换的表名','pname','name','id'
llxxzj311 2008-11-13
  • 打赏
  • 举报
回复
我这是两个表的内容你看以下结构
table1
id
name
table 2
id
pname
jjj
bbb

其中jjj,bbb分别代表talbe1中id 的内容
要求是让他们都显示出来 。jjj 和bbb对应的id字段的内容也都一块显示
刚才的问题就是显示的结果 。我想让jjj和bbb显示的结果分成两列
怎么弄
lee576 2008-11-13
  • 打赏
  • 举报
回复
如果是sql server 2005 可以用VARCHAR(max)
lee576 2008-11-13
  • 打赏
  • 举报
回复
/*范例表
create table 表1 (
號數 char(10),
成績 integer,
科目 char(10) )
insert into 表1 select '1',60,'数学'
union select '1',43,'物理'
union select '1',100,'语文'
union select '2',87,'语文'
union select '2',99,'数学'
union select '2',89,'物理'
union select '2',87,'语文'
*/
Create procedure RowToColumn
@Table varchar(30), --表名
@MasterField varchar(30), --待转名称列名 char字段
@SlaveField varchar(30), --待转数据列名 int型字段
@GroupID varchar(30) --分组ID
as
--调用方法 RowToColumn '表1','科目','成績','號數'
--by jinjazz 环境 SQLServer2000
begin
DECLARE @mSQL VARCHAR(8000)
set @msql = 'DECLARE @SQL VARCHAR(8000)'
set @msql = @msql + ' set @SQL= ''select ' + @GroupID + ''''
set @msql = @msql + ' SELECT @SQL= @SQL+'',max(CASE WHEN ' +
@MasterField + '=''''''+' + @MasterField + '+'''''' then ' + @SlaveField +
' else 0 end )[''+' + @MasterField + '+'']'' from(select distinct ' +
@MasterField + ' from ' + @Table + ') a'
set @msql = @msql + ' SET @SQL=@SQL+ '' from ' + @Table + ' group by ' +
@GroupID + ''''
set @msql = @msql + ' exec(@SQL)'
exec(@msql)
end
llxxzj311 2008-11-13
  • 打赏
  • 举报
回复
有什么好的方法解决吗
谢谢
lee576 2008-11-13
  • 打赏
  • 举报
回复
楼主表述不清,应该是想把name那一列相同的,拉成一行显示

交叉表
lee576 2008-11-13
  • 打赏
  • 举报
回复
楼上的不是楼主想要的
RHCL 2008-11-13
  • 打赏
  • 举报
回复
select 内容 as tmp from 表 where id=6 union select 内容 as tmp from 表 where id=7.... ....有好多种方法你看下sql的帮助文档或上网搜下~~

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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