首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

sql语句查询有关问题

2012-01-23 
sql语句查询问题有两个表,表1中的字段有编码,接收人,表2中的字段有编码,姓名其中:1)表1中的接收人是有多个

sql语句查询问题
有两个表,表1中的字段有编码,接收人,   表2中的字段有编码,姓名
其中:1)表1中的接收人是有多个表2中的编码组成的,例如:0001,0002,0003
2)我要得到的是真正的接收人应该是有表2的姓名组成的,例如:小明,小丽,小刚
3)两个表的连接条件是:表1.接收人=表2.编码

下面是表:
表1:   编码       接收人
              1           0001,0003
              2           0001,0002
              3           0001,0002,0003
表2:   编码       姓名  
            0001       小明
            0002       小丽
            0003       小刚

希望大家帮助呀!俺在线等!。。。。。

[解决办法]
编码 接收人
1 0001
1 0003
2 0001
2 0002
3 0001
3 0002
3 0003
表结构改成这样是不是要好点。
[解决办法]
学习...
[解决办法]
select * from 表1 INNER join 表2 ON (right(表1.接收人,4) = 表2.编码)
[解决办法]
SELECT FROM 表1 LEFT JOIN 表2 ON 表1.接收人 = 表2.编号;

[解决办法]
那加个字段好了
编码 编号 接收人
1 1 0001
1 2 0003
2 1 0001
2 2 0002
3 1 0001
3 2 0002
3 3 0003

[解决办法]
简单
select 表1.编码,表2.姓名 from 表1 left join 表2 on 表1.接收人=表2.编码

[解决办法]
用存储过程来实现,要使用游标的

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]

Transact-SQL 扩展语法
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[解决办法]
create function uf_splitstring
(
@str varchar(8000)--要分拆的字符串
,@spli varchar(10)--字符串分隔符
)
returns @retab table(istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab values(@str)
return
end

select * from uf_splitstring( '1,2,3,4,5,6,7,8 ', ', ')
=================================
这个过程也许对你有用
[解决办法]
select 表1.接收人,表1.编码,((select 姓名 from 表2 where left(表1.接收人,5)=表2.编码)+cast( case when substring(表1.接收人,6,1)= ', '
then ', '+(select 姓名 from 表2 where substring(表1.接收人,7,5)=表2.编码) else ' ' end + case when substring(表1.接收人,12,1)= ', '
then ', '+(select 姓名 from 表2 where substring(表1.接收人,13,5)=表2.编码) else ' ' end as nvarchar(16)) ) as 接收人 from 表2 INNER join 表1 ON (right(表1.接收人,5) = 表2.编码)




这个是你要的结果吧晕

接收人 编码 接收人
00001,00003 1小明,小刚
00001,00002 2小明,小丽
00001,00002,000033小明,小丽,小刚

[解决办法]
create table #t(编码 char(10),接收人 varchar(100))
INSERT #t SELECT 1, '0001,0003 '
UNION ALL SELECT 2, '0001,0002 '
UNION ALL SELECT 3, '0001,0002,0003 '

create table #t2(编码 char(10),姓名 varchar(100))
INSERT #t2 SELECT '0001 ', '小明 '
UNION ALL SELECT '0002 ', '小丽 '
UNION ALL SELECT '0003 ', '小刚 '

select * from #t
select * from #t2

declare @sql varchar(8000)
select top 1 @sql = 'replace(接收人, ' ' ' + rtrim(编码) + ' ' ', ' ' ' + 姓名 + ' ' ') ' from #t2

select @sql = 'replace( ' + @sql + ', ' ' ' + rtrim(编码) + ' ' ', ' ' ' + 姓名 + ' ' ') ' from #t2 where 编码 not in (select top 1 编码 from #t2)

select @sql = 'select 编码, ' + @sql + ' 接收人 from #t '
print @sql

exec(@sql)


给分
[解决办法]
JF的主子......................JF的主子......................JF的主子......................JF的主子......................JF的主子......................JF的主子......................
[解决办法]
select 表1名.编码,表2名.姓名 from 表1名,表2名 where 表1名.接收人=表2名.编码
[解决办法]
接分
[解决办法]
create table 表1
(
编码 int,
接受人 char(4)
)

insert into 表1 values(1, '0001 ')
insert into 表1 values(1, '0003 ')
insert into 表1 values(2, '0001 ')
insert into 表1 values(2, '0002 ')
insert into 表1 values(3, '0001 ')
insert into 表1 values(3, '0002 ')
insert into 表1 values(3, '0003 ')

create table 表2
(
编码 char(4),
姓名 varchar(20)
)

insert into 表2 values( '0001 ', '小明 ')
insert into 表2 values( '0002 ', '小丽 ')
insert into 表2 values( '0003 ', '小刚 ')

以下一句足以
select a.编码,b.姓名 from 表1 a inner join 表2 b
on a.接受人 = b.编码
[解决办法]
qiuyun8m() ( ) 信誉:100 Blog 加为好友 2007-6-6 11:46:30 得分: 0



create table #t(编码 char(10),接收人 varchar(100))
INSERT #t SELECT 1, '0001,0003 '
UNION ALL SELECT 2, '0001,0002 '
UNION ALL SELECT 3, '0001,0002,0003 '

create table #t2(编码 char(10),姓名 varchar(100))
INSERT #t2 SELECT '0001 ', '小明 '
UNION ALL SELECT '0002 ', '小丽 '
UNION ALL SELECT '0003 ', '小刚 '

select * from #t
select * from #t2

declare @sql varchar(8000)
select top 1 @sql = 'replace(接收人, ' ' ' + rtrim(编码) + ' ' ', ' ' ' + 姓名 + ' ' ') ' from #t2

select @sql = 'replace( ' + @sql + ', ' ' ' + rtrim(编码) + ' ' ', ' ' ' + 姓名 + ' ' ') ' from #t2 where 编码 not in (select top 1 编码 from #t2)

select @sql = 'select 编码, ' + @sql + ' 接收人 from #t '
print @sql

exec(@sql)



------------------------------------------------
这个写法很别致哦。。。。不错,。。。。mark。。。。。




[解决办法]
oydu(海阔天空) chinank(中国南开)
的确可以

热点排行