表1:
id 属性
1 姓名
2 年龄
3 学校
表2
id 属性id 内容 记录id
1 1 刘德华 A
2 2 30 A
3 3 清华 A
4 1 张三 B
5 2 20 B
6 3 北大 B这是我从excel导入过来的,所以就这样设计了,因为字段不固定,表1会有很多字段,现在我想查询结果为
姓名 年龄 学校
刘德华 30 清华
张三 20 北大记录id是我记录同一个属性的,是惟一的,数据sqlserver 跪求DBA高手,100分,我就这么多分了!
id 属性
1 姓名
2 年龄
3 学校
表2
id 属性id 内容 记录id
1 1 刘德华 A
2 2 30 A
3 3 清华 A
4 1 张三 B
5 2 20 B
6 3 北大 B这是我从excel导入过来的,所以就这样设计了,因为字段不固定,表1会有很多字段,现在我想查询结果为
姓名 年龄 学校
刘德华 30 清华
张三 20 北大记录id是我记录同一个属性的,是惟一的,数据sqlserver 跪求DBA高手,100分,我就这么多分了!
CREATE TABLE 表1
( id int,
属性 varchar(10), ) INSERT INTO 表1
select '1','姓名' union all
select '2','年龄' union all
select '3','学校' CREATE TABLE 表2
( id int,
属性id int,
内容 varchar(10),
记录id varchar(10), ) INSERT INTO 表2
select '1','1','刘德华','A' union all
select '2','2','30','A' union all
select '3','3','清华','A' union all
select '4','1','张三','B' union all
select '5','2','20','B' union all
select '6','3','北大','B'
--SQL SERVER 2000 动态SQL
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 属性 from 表1 group by 属性
set @sql = '[' + @sql + ']'
exec ('select 姓名,年龄,学校 from (select 表1.属性,表2.内容,表2.记录id from 表1,表2 where 表1.id=表2.属性id) a pivot (max(内容) for 属性 in (' + @sql + ')) b')
--SQL SERVER 2005 静态SQL。 select 姓名,年龄,学校 from (select 表1.属性,表2.内容,表2.记录id from 表1,表2 where 表1.id=表2.属性id) a pivot (max(内容) for 属性 in (姓名,年龄,学校)) b
go
create table [tb1]([id] int,[属性] varchar(4))
insert [tb1]
select 1,'姓名' union all
select 2,'年龄' union all
select 3,'学校'
go
if object_id('[tb2]') is not null drop table [tb2]
go
create table [tb2]([id] int,[属性id] int,[内容] varchar(6),[记录id] varchar(1))
insert [tb2]
select 1,1,'刘德华','A' union all
select 2,2,'30','A' union all
select 3,3,'清华','A' union all
select 4,1,'张三','B' union all
select 5,2,'20','B' union all
select 6,3,'北大','B'
godeclare @sql varchar(8000)
select
@sql=isnull(@sql+',','')
+'max(case when 属性id='+ltrim(id)+' then 内容 else '''' end) as ['+属性+']'
from
(select a.id,a.属性 from tb1 a join tb2 b on a.id=b.属性id group by a.id,a.属性) texec ('select '+@sql+' from tb2 group by (id-1)/3')/**
姓名 年龄 学校
------ ------ ------
刘德华 30 清华
张三 20 北大(2 行受影响)
**/
select* into #tt from(select*from 表1,表2 where 表1.ID=表2.属性ID)t
declare @s varchar(max)
set @s='select 记录id '
select @s=@s
+','+quotename(属性 )
+N'=case 属性 when '+quotename(jc,N'''')
+N' then 内容 end'from #tt group by 属性
exec(@s
+N'from #tt group by 记录id ')
print(@s)
drop table #tt
然后结贴