• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

一段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 + ' = 数量 ,'
这么写可行么.
...全文
98 点赞 收藏 11
写回复
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 名称, 分配号码
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告