一段SQL问题...求教

ljfdd 2004-12-28 11:48:33
declare @sql nvarchar(4000)

declare @temp nvarchar(8)

set @sql = ' select ' + @temp + ' = 数量 ,'

select @sql = @sql +' , ''' + b.人员类型 + ' / ' + b.性別 + ''' '
from (select * from tb1
where 数量 = @temp ) as b

set @sql = @sql + ' from tb1 a '

exec(@sql)
我的意图是,把检索出来的数量寸在变量@temp中,
然后在下边使用@temp得到其他信息
可是不知道
set @sql = ' select ' + @temp + ' = 数量 ,'
这么写可行么.
...全文
139 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
我对SQL不是很在行,
具体怎么实现
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
是为了显示.是没什么其他用途.
dulei115 2004-12-28
  • 打赏
  • 举报
回复
你的结果是为了显示还是其它?如果只是为了显示,可以让他这样显示,这样就简单多了,而且我看不出你那样的结果除了显示外还有其它什么用处

名称 人员类型/性别/人数
19s101 大人/男/4
19s101 大人/男/4 大人/女/2 小孩/其他/3
11w201 大人/男/2
11w201 大人/男/2
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
我已经开一个贴子了,在发一次
表结构如下:
库号 名称 分配号码 人员类型 性别 人员数
03 19S101 001 大人 男 4
03 19S101 002 大人 男 4
03 19S101 002 大人 女 2
03 19S101 002 小孩 其他 3
03 11W201 001 大人 男 2
03 11W201 002 大人 男 2
希望得到如下结果:
名称 人员类型/性别 人数 人员类型/性别 人数 人员类型/性别 人数
19s101 大人/ 男 4
19s101 大人/ 男 4 大人/ 女 2 小孩/其他 3
11w201 大人/ 男 2
11w201 大人/ 男 2

难点在于,名称和分配号码相同的要把他们的人员类型/性别 人数合并成一条数据.
比如说 名称:19s101 分配号码:002
03 19S101 002 大人 男 4
03 19S101 002 大人 女 2
03 19S101 002 小孩 其他 3
这三条数据合并成

19s101 大人/ 男 4 大人/ 女 2 小孩/其他 3
其中按照名称和分配号码分组.
基本上就这些. 大家帮看看吧.
dulei115 2004-12-28
  • 打赏
  • 举报
回复
看不懂,干脆你将表的结构写出来,然后说明一下你的要求,想得到怎样的结果,我认为这样的效果会更好
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
不是这么简单的,因为对应一个数量的有可能是多条人员类型/性別.
也就是说检索出来的列数是变动的.
写这个的目的是要把符合条件的多条合并成一条.一起输出.
lsxaa 2004-12-28
  • 打赏
  • 举报
回复
select @temp=数量,b.人员类型,b.性别
from (select * from tbl where 数量=@temp) as b
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
恩..可以的.谢谢了.
ljfdd 2004-12-28
  • 打赏
  • 举报
回复
先谢谢了.我马上测试.
dulei115 2004-12-28
  • 打赏
  • 举报
回复
利用函数实现,下面的语句在查询分析器中测试通过
if object_id('tbl') is not null drop table tbl
create table tbl(库号 varchar(2), 名称 varchar(6), 分配号码 varchar(3),
人员类型 varchar(4), 性别 varchar(4), 人员数 int)
insert into tbl values('03', '19S101', '001', '大人', '男', 4)
insert into tbl values('03', '19S101', '002', '大人', '男', 4)
insert into tbl values('03', '19S101', '002', '大人', '女', 2)
insert into tbl values('03', '19S101', '002', '小孩', '其它', 3)
insert into tbl values('03', '11W201', '001', '大人', '男', 2)
insert into tbl values('03', '11W201', '002', '大人', '男', 2)

select * from tbl
/*
库号 名称 分配号码 人员类型 性别 人员数
03 19S101 001 大人 男 4
03 19S101 002 大人 男 4
03 19S101 002 大人 女 2
03 19S101 002 小孩 其它 3
03 11W201 001 大人 男 2
03 11W201 002 大人 男 2
*/
go
if object_id('dbo.sumstring') is not null drop function sumstring
go
create function sumstring(@name varchar(6), @no varchar(3))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s = ''
select @s = @s + ' ' + 人员类型 + '/' + 性别 + '/' + cast(人员数 as varchar(20))
from tbl
where 名称 = @name and 分配号码 = @no
return ltrim(@s)
end
go
select 名称, 分配号码, dbo.sumstring(名称, 分配号码) as [人员类型/性别/人数]
from tbl
group by 名称, 分配号码
/*
名称 分配号码 人员类型/性别/人数
11W201 001 大人/男/2
11W201 002 大人/男/2
19S101 001 大人/男/4
19S101 002 大人/男/4 大人/女/2 小孩/其它/3
*/

drop function sumstring
drop table tbl



*************************************************************************
*************************************************************************
实际应用中先创建一个函数
create function sumstring(@name varchar(6), @no varchar(3))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s = ''
select @s = @s + ' ' + 人员类型 + '/' + 性别 + '/' + cast(人员数 as varchar(20))
from tbl
where 名称 = @name and 分配号码 = @no
return ltrim(@s)
end

然后通过下面的SQL语句得到结果
select 名称, 分配号码, dbo.sumstring(名称, 分配号码) as [人员类型/性别/人数]
from tbl
group by 名称, 分配号码
dulei115 2004-12-28
  • 打赏
  • 举报
回复
利用函数实现,下面的语句在查询分析器中测试通过
if object_id('tbl') is not null drop table tbl
create table tbl(库号 varchar(2), 名称 varchar(6), 分配号码 varchar(3),
人员类型 varchar(4), 性别 varchar(4), 人员数 int)
insert into tbl values('03', '19S101', '001', '大人', '男', 4)
insert into tbl values('03', '19S101', '002', '大人', '男', 4)
insert into tbl values('03', '19S101', '002', '大人', '女', 2)
insert into tbl values('03', '19S101', '002', '小孩', '其它', 3)
insert into tbl values('03', '11W201', '001', '大人', '男', 2)
insert into tbl values('03', '11W201', '002', '大人', '男', 2)

select * from tbl
/*
库号 名称 分配号码 人员类型 性别 人员数
03 19S101 001 大人 男 4
03 19S101 002 大人 男 4
03 19S101 002 大人 女 2
03 19S101 002 小孩 其它 3
03 11W201 001 大人 男 2
03 11W201 002 大人 男 2
*/
go
if object_id('dbo.sumstring') is not null drop function sumstring
go
create function sumstring(@name varchar(6), @no varchar(3))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s = ''
select @s = @s + ' ' + 人员类型 + '/' + 性别 + '/' + cast(人员数 as varchar(20))
from tbl
where 名称 = @name and 分配号码 = @no
return ltrim(@s)
end
go
select 名称, 分配号码, dbo.sumstring(名称, 分配号码) as [人员类型/性别/人数]
from tbl
group by 名称, 分配号码
/*
名称 分配号码 人员类型/性别/人数
11W201 001 大人/男/2
11W201 002 大人/男/2
19S101 001 大人/男/4
19S101 002 大人/男/4 大人/女/2 小孩/其它/3
*/

drop function sumstring
drop table tbl



*************************************************************************
*************************************************************************
实际应用中先创建一个函数
create function sumstring(@name varchar(6), @no varchar(3))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s = ''
select @s = @s + ' ' + 人员类型 + '/' + 性别 + '/' + cast(人员数 as varchar(20))
from tbl
where 名称 = @name and 分配号码 = @no
return ltrim(@s)
end
然后通过下面的SQL语句得到羯结果
select 名称, 分配号码, dbo.sumstring(名称, 分配号码) as [人员类型/性别/人数]
from tbl
group by 名称, 分配号码

34,837

社区成员

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

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