如何在写这个语句

kelly_leecn 2010-05-18 05:58:37
表tab1
id colname ckflag
1 col1 1
2 col2 0
3 col3 1
4 col4 1
5 col5 0

表tab2
col1 col2 col3 col4 col5
001 白色 10 0.07 0.7
002 红色 8 0.18 1.44

想得到的结果是,
如果表tab1的字段ckflag=1,例如上表中col1,col3和col4对应的ckflag=1那么在表tab2中的查询结果是
select col1,col3,clo4 from tab2
即:
col1 col3 col4
001 10 0.07
002 8 0.18

再举一个例,如果上表中col1,col2,col3对应的ckflag=1,那么在表tab2中的查询结果是
select col1,col2,col3 from tab2
col1 col2 col3
001 白色 10
002 红色 8


请问如何写这个语句。
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2010-05-18
  • 打赏
  • 举报
回复
declare @sql varchar(2000)
select @sql=isnull(@sql+',','select ')+ colname from tb1 where ckflag=1
exec(@sql+' from tb2' )
sql_sf 2010-05-18
  • 打赏
  • 举报
回复
--动态语句
declare @sql varchar(max)
select @sql=isnull(@sql+',','select ')+
(select distinct colname
from tb1
where ckflag=1)
exec(@sql+' from tb2' )
永生天地 2010-05-18
  • 打赏
  • 举报
回复

if object_id('tb1') is not null drop table tb1
go
create table tb1 (id int,colname varchar(5),ckflag int)
insert tb1
select 1 ,'col1', 1 union all
select 2 ,'col2', 0 union all
select 3 ,'col3', 1 union all
select 4 ,'col4', 1 union all
select 5 ,'col5', 0
go
if object_id('tb2') is not null drop table tb2
go
create table tb2 (col1 varchar(3), col2 varchar(4), col3 int, col4 numeric(3,2) ,col5 numeric(3,2))
insert tb2
select '001', '白色', 10, 0.07, 0.7 union all
select '002', '红色', 8, 0.18 ,1.44
go

declare @sql varchar(8000)
select @sql=isnull(@sql+',','select ')+ colname from tb1 where ckflag=1
exec(@sql+' from tb2' )
/*
col1 col3 col4
---- ----------- -----
001 10 .07
002 8 .18

(所影响的行数为 2 行)
*/

34,589

社区成员

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

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