sql语句2个表关联问题!

来源:百度知道 编辑:UC知道 时间:2024/06/01 16:46:01
比如表a有这几列columns1,columns2,columns3。表中记录如下表:
columns1 |columns2 |columns3
-----------------------------
1 | 2 | 3
表b就2列columns和flag。表中记录如下表:
columns | flag
---------------
columns1| 1
columns2| 0
columns3| 1
我想根据表b列的状态(查询B表中列名状态为1的)关联查询表a的数据,比如用view希望得到如下结果:
columns1 | columns3
--------------------
1 | 3
请问具体SQL语句如何写呢?请教高手赐教!千万别跟我说改表的结构啊。如蒙赐教不吝感激。小弟头疼死了!!!

先写个函数,得到需要查询的列的列表:
create function getColName()
returns varchar(80)
as
begin
declare @r varchar(80)
declare @c cursor
declare @f varchar(10)
set @r=''
set @c=cursor forward_only read_only for select [columns] from b where flag=1
open @c
fetch next from @c into @f
while @@fetch_status=0
begin
set @r=@r+@f+','
fetch next from @c into @f
end
set @r=substring(@r,1,len(@r)-1)
close @c
return @r
end

然后再写个存储过程:
create procedure SuperSelect as
declare @s varchar(80)
set @s=dbo.getColName()
execute ('select '+@s+' from a')

SELECT columns1,columns3
FROM 表a,表b
WHERE (A.columns1=B.columns) OR (A.columns2=B.columns) OR (A.columns3=B.columns) AND B.FLAGS=1