表A(价格表)
F_Name F_Price1 F_price2
普通 10 5
金卡 9 4
银卡 8 3表B(规格表)
F_ID F_specname F_Spec
1 盒子 规格1
2 盒子 规格2
3 盒子 规格3
按以上两表,动态生成列,结果如下表10元 | 9 元 | 8元 | 5元 | 4元 | 3元 | 规格1 | 规格2 | 规格3|
F_Name F_Price1 F_price2
普通 10 5
金卡 9 4
银卡 8 3表B(规格表)
F_ID F_specname F_Spec
1 盒子 规格1
2 盒子 规格2
3 盒子 规格3
按以上两表,动态生成列,结果如下表10元 | 9 元 | 8元 | 5元 | 4元 | 3元 | 规格1 | 规格2 | 规格3|
select @sql ='SELECT '
select @sql =@sql + distinct(RTRIM(F_Price1)+'元|') FROM 表A
select @sql =@sql + distinct(RTRIM(F_price2)+'元|') FROM 表A
select @sql =@sql + distinct('规格'+RTRIM(F_ID)+'|') FROM 表BSELECT @sql
select @sql =''
select @sql =@sql + distinct(RTRIM(F_Price1)+'元|') FROM 表A
select @sql =@sql + distinct(RTRIM(F_price2)+'元|') FROM 表A
select @sql =@sql + distinct('规格'+RTRIM(F_ID)+'|') FROM 表BSELECT @sql 或者
declare @sql varchar(4000)
select @sql ='SELECT '
select @sql =@sql + distinct(RTRIM(F_Price1)+'元,') FROM 表A
select @sql =@sql + distinct(RTRIM(F_price2)+'元,') FROM 表A
select @sql =@sql + distinct('规格'+RTRIM(F_ID)+',') FROM 表BSELECT @sql =LEFT(@sql,len(@sql)-1)
insert A select '普通', 10, 5
union all select '金卡', 9, 4
union all select '银卡', 8, 3create table B(F_ID int, F_specname nvarchar(10), F_Spec nvarchar(10))
insert B select 1, '盒子', '规格1'
union all select 2, '盒子', '规格2'
union all select 3, '盒子', '规格3'declare @sql varchar(8000)
set @sql='select '''
select @sql=@sql+col+' | ' from
(
select col=cast(F_Price1 as nvarchar)+'元' from A
union all
select cast(F_price2 as nvarchar)+'元' from A
union all
select F_Spec from B
)tmp
set @sql=@sql+''''
exec(@sql)--result
-------------------------------------------------------------------------------
10元 | 9元 | 8元 | 5元 | 4元 | 3元 | 规格1 | 规格2 | 规格3 |
marco08(天道酬勤) 10元 | 9元 | 8元 | 5元 | 4元 | 3元 | 规格1 | 规格2 | 规格3 | 这些不是一列,而是10元是一列,9元是一列。。依此类推
create table A(F_Name nvarchar(10), F_Price1 int, F_price2 int)
insert A select '普通', 10, 5
union all select '金卡', 9, 4
union all select '银卡', 8, 3create table B(F_ID int, F_specname nvarchar(10), F_Spec nvarchar(10))
insert B select 1, '盒子', '规格1'
union all select 2, '盒子', '规格2'
union all select 3, '盒子', '规格3'declare @sql varchar(8000)
set @sql='select '
select @sql=@sql+quotename(col)+'='+quotename(col+' | ', '''')+',' from
(
select col=cast(F_Price1 as nvarchar)+'元' from A
union all
select cast(F_price2 as nvarchar)+'元' from A
union all
select F_Spec from B
)tmp
set @sql=left(@sql, len(@sql)-1)
exec(@sql)--result
10元 9元 8元 5元 4元 3元 规格1 规格2 规格3
--------- -------- -------- -------- -------- -------- ---------- ---------- ----------
10元 | 9元 | 8元 | 5元 | 4元 | 3元 | 规格1 | 规格2 | 规格3 |
10元 9元 8元 5元 4元 3元 规格1 规格2 规格3
F_sprice1|10元 F_sprice1|9元 F_sprice1|8元 F_sprice2|5元 F_sprice2|4元 F_sprice2|3元 盒子|规格1 盒子|规格2 盒子|规格3 F_sprice1|10元是一列,F_sprice1|9元是一列,依此类推