日期:2014-05-17  浏览次数:20545 次

将查询条件作为结果输出,求一存储过程
假设:(我说的是假设,如有雷同,那不意思,也有可能是巧合!!!)

-----------------testa-----------------------------------
drop table testa
go
create table testA(id int,nm varchar(20),cityid int ,citynm varchar(50),rearid int ,areanm varchar(50))
insert into testA select 1,'东京A',01,'东京热',1001,'东京热1'
union all
select 2,'东京B',01,'东京热',1001,'东京热1'
union all
select 3,'东京C',01,'东京热',1001,'东京热1'
union all
select 4,'加勒比A',02,'加勒比',1002,'asd'
union all
select 5,'加勒比B',02,'加勒比',1002,'asd'
union all
select 6,'加勒比C',02,'加勒比',1002,'asd'
union all
select 7,'一本道A',03,'一本道',1002,'asd'
union all
select 8,'一本道B',03,'一本道',1002,'asd'
union all
select 9,'一本道C',03,'一本道',1002,'asd'

select * from testa

drop table testB
go
create table testB(id int, nm varchar(50),cityid int,rearid int,nmid int)
insert into testB select 1,'苍井空',1,1001,1
union all
select 2,'武藤兰',1,1001,1
union all
select 3,'饭岛爱',1,1001,1
union all
select 4,'小泽玛莉亚',1,1001,1
union all
select 5,'啊啊啊',2,1002,2
union all
select 6,'嗷嗷啊',4,1002,4

select * from testB



已知条件:city的级别大于area,area大于名称(nm)
          (东京)         (东京热)           (东京A)

这里是查询语句:


select a.nm as '子公司',a.areanm as '子子公司',a.citynm as '公司',b.nm as 'star' from testA a join testB b on a.id = b.nmid

----------------------------------------------
子公司 子子公司 公司 star
东京A 东京热1 东京热 苍井空
东京A 东京热1 东京热 武藤兰
东京A 东京热1 东京热 饭岛爱
东京A 东京热1 东京热 小泽玛莉亚
东京B 东京热1 东京热 啊啊啊
加勒比A asd 加勒比 嗷嗷啊



假设我传条件:b.nmid = 1,我希望得到的是:

select a.nm as '子公司',a.citynm as '公司',b.nm as 'star' from testA a join testB b on a.id = b.nmid
where b.nmid = 1
------------得到以nmid的value东京A作为列头-----------------------

子公司 公司 star
东京A 东京热 苍井空
东京A 东京热 武藤兰
东京A 东京热 饭岛爱
东京A 东京热 小泽玛莉亚



假设我传条件:b.rearid = 1001,我希望得到的是:

select a.areanm as '子子公司',a.citynm as '公司',b.nm as 'star' from testA a join testB b on a.id = b.nmid
where b.rearid = 1001
------------得到以rearid 的value东京热1作为列头-----------------------

子子公司 公司 star
东京热1 东京热 苍井空
东京热1 东京热 武藤兰
东京热1 东京热 饭岛爱
东京热1 东京热 小泽玛莉亚


问题:求一存储过程,能够实现我上面的效果,output 不会用
55555555555555555,求大神的到来!

最后给你添麻烦了:
请执行:
drop table testa
go
drop table testB
go
------最佳解决方案--------------------
create proc pr_name(@str varchar(100))
 as
 begin
if @str like '%nmid%'
    exec('select a.nm as ''子公司'',a.citynm as ''公司'',b.nm as ''star''