列和行的相匹配a表
主键 姓名 班级 年龄
1 aa 03 18b表
主键 名称 启用
1 姓名 true
2 班级 true
3 年龄 false这是两张表,我需查询a表的列的数据,条件是在b表中对应的为true的谢谢大家,帮个忙
主键 姓名 班级 年龄
1 aa 03 18b表
主键 名称 启用
1 姓名 true
2 班级 true
3 年龄 false这是两张表,我需查询a表的列的数据,条件是在b表中对应的为true的谢谢大家,帮个忙
if object_id('a表') is not null drop table a表---->建表
create table a表([主键] int,[姓名] varchar(2),[班级] varchar(2),[年龄] int)
insert a表
select 1,'aa','03',18
GO
--> 测试数据:b表
if object_id('b表') is not null drop table b表---->建表
create table b表([主键] int,[名称] varchar(4),[启用] varchar(5))
insert b表
select 1,'姓名','true' union all
select 2,'班级','true' union all
select 3,'年龄','false'
GO--> 查询结果
SELECT * FROM a表
--> 删除表格
--DROP TABLE a表
--> 查询结果
SELECT * FROM b表
--> 删除表格
--DROP TABLE b表
declare @sql varchar(200)
set @sql='select '+stuff((select ','+b表.名称 from b表 where 启用 ='true' for xml path('')),1,1,'')+' from a表'
exec (@sql)-----------------
姓名 班级
aa 03
select @col=isnull(@col+',','')+名称 from b where 启用='true'exec ('select '+@col+' from a')
set @sql='select '+
stuff(REPLACE(REPLACE((select b表.名称 from b表 where 启用 ='true' FOR XML AUTO),'<b表 名称="', ','), '"/>', ''), 1, 1, '')
+' from a表'
exec (@sql)这样也可以
if object_id('b')>0
drop table b
create table b
(
主键 int,
名称 varchar(20),
启用 varchar(5)
)
if object_id('a')>0
drop table a
create table a
(
主键 int ,
姓名 varchar(20),
班级 varchar(4),
年龄 int
)insert into a
select 1 ,'aa', '03', 18insert into b
select 1 ,'姓名', 'true'
union all
select 2, '班级', 'true'
union all
select 3, '年龄', 'false'select * from a
select * from bdeclare @s varchar(100)
set @s = ''
select @s = @s+ 名称 +',' from b where 启用 = 'true'
--print left(@s,len(@s)-1)
declare @s1 varchar(100)
set @s1=left(@s,len(@s)-1)declare @sql varchar(max)
set @sql ='select '+@s1+' from a'
--print @sqlexec(@sql)结果
姓名 班级
aa 03
CREATE TABLE b(主键 INT,名称 VARCHAR(20),启用 BIT)INSERT INTO a(主键,姓名,班级,年龄)
SELECT 1,'aa','03',18INSERT INTO b(主键, 名称,启用)
SELECT 1,'姓名',1 UNION ALL
SELECT 2,'班级',1 UNION ALL
SELECT 3,'年龄',0
DECLARE @sqlstr VARCHAR(200)SET @sqlstr = ''SELECT @sqlstr = @sqlstr + b.名称 + ',' FROM b WHERE b.启用 = 1IF (LEN(@sqlstr) > 0)
BEGIN
SELECT @sqlstr = SUBSTRING(@sqlstr,1,LEN(@sqlstr)-1)
SELECT @sqlstr = 'select a.主键,' + @sqlstr + ' from a'
END
ELSE SELECT @sqlstr = 'select a.主键 from a'EXEC sp_sqlexec @sqlstr
主键 班级ID 班级名称
1 1 03
这个应该怎么做呢?
还有如果A表上面的列是英文,我想取个别名,改成中文应该怎么写。比如班级列名为class我想显示的时候列名为班级
create table tbl_a(id int,aName varchar(20),aClass varchar(20),aAge int)insert into tbl_a
select 1,'name1','class1',21 union all
select 2,'name2','class2',22 select * from tbl_acreate table tbl_b(id int,bName varchar(20),bBool varchar(20))insert into tbl_b
select 1,'姓名','true' union all
select 2,'班级','true' union all
select 3,'年龄','false'
create table tbl_ab(id int,name_En varchar(20),name_Cn varchar(20))
insert into tbl_ab
select 1,'aName','姓名' union all
select 2,'aClass','班级' union all
select 3,'aAge','年龄'
declare @s varchar(100)
set @s = ''
select @s = @s+ ab.name_En +',' from tbl_b b,tbl_ab ab where bBool = 'true' and ab.name_Cn = b.bNamedeclare @ss varchar(100)
set @ss = left(@s,len(@s)-1)declare @strSQL varchar(500)
set @strSQL = 'select ' + @ss+ ' from tbl_a'exec(@strSQL)