SQL把几行数据显示到一行上

wanglinxi 2010-10-14 02:09:02
如下描述:

字段

数据一
数据二
数据三

我想要的结果:

字段

数据一\数据二\数据三


就是把几行的数据显示在一行上。。。。
...全文
386 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DBA_磊仔 2012-09-23
  • 打赏
  • 举报
回复
静态写成动态只是拼凑问题,没有写出动态的语句是因为两者转换非常容易,这里给出的只是思路,此类变换无需遍历、临时表之类的东西
[Quote=引用 11 楼 的回复:]
引用 9 楼 的回复:
你这个写死了的,不灵活啊。
个人观点 要实现这个不能用简单的sql语句解决。只能用存储过程或函数来解决,可能需要遍历、中途可能需要临时表![/Quote]
jilonglv 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

SQL code

--构建测试数据
create table #TB(房号 int, 床号 int, 姓名 varchar(10))
insert into #TB select 201, 0, '张三'
union all select 201, 1, '张四'
union all select 201, 2, '张五'
union all select 202, 0, '张六'
unio……
[/Quote]
你这个写死了的,不灵活啊。
个人观点 要实现这个不能用简单的sql语句解决。只能用存储过程或函数来解决,可能需要遍历、中途可能需要临时表!
以学习为目的 2012-09-23
  • 打赏
  • 举报
回复
楼上几位正解!
DBA_磊仔 2012-09-23
  • 打赏
  • 举报
回复

--构建测试数据
create table #TB(房号 int, 床号 int, 姓名 varchar(10))
insert into #TB select 201, 0, '张三'
union all select 201, 1, '张四'
union all select 201, 2, '张五'
union all select 202, 0, '张六'
union all select 202, 1, '张七'
union all select 202, 2, '张八'
--效果一解决方案
select 房号,0 as 床号,[0] as 姓名, 1 as 床号, [1] as 姓名 , 2 as 床号,[2] as 姓名
from #TB pivot (max(姓名)for 床号 in ([0],[1],[2]))p
/*
房号 床号 姓名 床号 姓名 床号 姓名
----------- ----------- ---------- ----------- ---------- ----------- ----------
201 0 张三 1 张四 2 张五
202 0 张六 1 张七 2 张八

(2 行受影响)
*/
--效果二解决方案
select 房号,[0] as 床号0,[1] as 床号1,[2] as 床号2 from #TB pivot (max(姓名)for 床号 in ([0],[1],[2]) )p
/*
房号 床号0 床号1 床号2
----------- ---------- ---------- ----------
201 张三 张四 张五
202 张六 张七 张八

(2 行受影响)
*/


ryanwus 2012-09-21
  • 打赏
  • 举报
回复
这个不错,我也是建议用UDF,之前我也是类似这样做的
[Quote=引用 5 楼 的回复:]

引用 4 楼 happycell188 的回复:
SQL code
--SQL Server 2000
create function dbo.f_str()
returns varchar(100)
as
begin
declare @str varchar(100)
select @str=isnull(@str+'\','')+rtrim(字段) from tb
end
……
[/Quote]
zhugaoping 2012-09-21
  • 打赏
  • 举报
回复
SQL目前查出的结果是:
房号 床号 姓名
201 0 张三
201 1 张四
201 2 张五
202 0 张六
202 1 张七
202 2 张八
希望查出的结果是:
房号 床号 姓名 床号 姓名 床号 姓名
201 0 张三 1 张四 2 张五
202 0 张六 1 张七 2 张八

请各位大师帮帮忙,谢谢!
喜-喜 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 happycell188 的回复:]
SQL code
--SQL Server 2000
create function dbo.f_str()
returns varchar(100)
as
begin
declare @str varchar(100)
select @str=isnull(@str+'\','')+rtrim(字段) from tb
end
go

select 字段=dbo.f_str(……
[/Quote]
--SQL Server 2000
create function dbo.f_str()
returns varchar(100)
as
begin
declare @str varchar(100)
select @str=isnull(@str+'\','')+rtrim(字段) from tb
return @str --少了return,呵呵..
end
go

select 字段=dbo.f_str() from tb

喜-喜 2010-10-14
  • 打赏
  • 举报
回复
--SQL Server 2000
create function dbo.f_str()
returns varchar(100)
as
begin
declare @str varchar(100)
select @str=isnull(@str+'\','')+rtrim(字段) from tb
end
go

select 字段=dbo.f_str() from tb
喜-喜 2010-10-14
  • 打赏
  • 举报
回复
--SQL Server 2005
select 字段=stuff((select '\'+rtrim(字段) from tb for xml path('')),1,1,'') from tb
王向飞 2010-10-14
  • 打赏
  • 举报
回复

--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:[TB]
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TB]')
AND type in (N'U'))
DROP TABLE [TB]
GO

---->建表
create table [TB]([name] varchar(4),[status] varchar(8))
insert [TB]
select '小张','普通员工' union all
select '小张','组长' union all
select '小二','经理' union all
select '小三','老板' union all
select '小三','员工'
GO


SELECT a.name,
status =stuff((
select ','+convert(varchar(20),status) FROM [TB] WHERE name = a.name for xml path(''))
,1,1,'')
FROM [TB] a
group by a.name

SELECT a.name,
status =STUFF(REPLACE(REPLACE(
(select status
FROM [TB]
where name = a.name
FOR XML AUTO
), '<TB status="', ','), '"/>', ''), 1, 1, '')
FROM [TB] a
group by a.name
--> 查询结果
SELECT * FROM [TB]
--> 删除表格
--DROP TABLE [TB]

SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
串起来还是分字段?

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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