自定义属性、值,行转列
查询的结果
GID	GNumber	GName	        AName	VName
3	p003	仿古牛仔裤	尺码	34寸
3	p003	仿古牛仔裤	颜色	蓝色
4	p004	西装短裤	尺码	34寸
4	p004	西装短裤	颜色	蓝色
5	p005	7分裤	        尺码	32寸
5	p005	7分裤	        颜色	白色
怎么转成
GID	GNumber	GName		尺码	颜色
3	p003	仿古牛仔裤	34寸	蓝色
4	p004	西装短裤	34寸	蓝色
5	p005	7分裤		32寸	白色
/********************   类别表Category  ***********************/
create table Category
(
	CID int primary key identity(1,1),
	CName nvarchar(10) not null
)
insert Category values('手机')
insert Category values('服装')
/********************   类别属性表Attribute(用户自定义)  ***********************/
create table Attribute
(
	AID int primary key identity(1,1),
	ACID int foreign key references Category(CID),
	AName nvarchar(10) not null
)
insert Attribute values(1, '屏幕尺寸')
insert Attribute values(1, '操作系统')
insert Attribute values(1, '手机制式')
insert Attribute values(2, '尺码')
insert Attribute values(2, '颜色')
/********************   属性值表AttDefaultValue(用户自定义)  ***********************/
create table AttDefaultValue
(
	VID int primary key identity(1,1),
	AID int foreign key references Attribute(AID) not null,
	VName nvarchar(10) not null
)
insert AttDefaultValue values(1,'3.2寸')
insert AttDefaultValue values(1,'3.5寸')
insert AttDefaultValue values(1,'4.0寸')
insert AttDefaultValue values(1,'4.3寸')
insert AttDefaultValue values(2,'ios')
insert AttDefaultValue values(2,'wp7.5')
insert AttDefaultValue values(2,'Android')
insert AttDefaultValue values(2,'symbian')
insert AttDefaultValue values(3,'CDMA')
insert AttDefaultValue values(3,'GSM')
insert AttDefaultValue values(4,'32寸')
insert AttDefaultValue values(4,'34寸')
insert AttDefaultValue values(4,'36寸')
insert AttDefaultValue values(5,'蓝色')
insert AttDefaultValue values(5,'黑色')
insert AttDefaultValue values(5,'白色')
insert AttDefaultValue values(5,'红色')
/********************     商品表Goods    ***********************/
create table Goods
(
	GID int primary key identity(1,1),
	CategoryID int foreign key references Category(CID) not null,
	GNumber nvarchar(10) not null,
	GName nvarchar(10) not null
)
insert Goods values(1,'p001','IPhone4')
insert Goods values(1,'p002','G10')
insert Goods values(2,'p003','仿古牛仔裤')
insert Goods values(2,'p004','西装短裤')
insert Goods values(2,'p005','7分裤')
/********************    属性值记录表AttRecord    ***********************/
create table AttRecord
(
	RID int primary key identity(1,1),
	RGID int foreign key references Goods(GID) not null,
	RValueID int foreign key references AttDefaultValue(VID) not null
)
insert AttRecord values(1,1)
insert AttRecord values(1,5)
insert AttRecord values(1,10)
insert AttRecord values(2,2)
insert AttRecord values(2,7)
insert AttRecord values(2,10)
insert AttRecord values(3,12)
insert AttRecord values(3,14)
insert AttRecord values(4,12)
insert AttRecord values(4,14)
insert AttRecord values(5,11)
insert AttRecord values(5,16)
select G.GID,G.GNumber,G.GName,AB.AName,DV.VName from Goods G
inner join AttRecord AR on G.GID=AR.RGID
inner join AttDefaultValue DV on AR.RValueID=DV.VID
inner join Attribute AB on AB.AID=DV.AID where G.CategoryID=2
------解决方案--------------------动态行转列
搜索行转列精华
------解决方案--------------------
SQL code
--> 测试数据:[test]
if object_id('[test]') is not null 
drop table [test]
create table [test](
[GID] int,
[GNumber] varchar(4),
[GName] varchar(10),
[AName] varchar(4),
[VNa