商品 分店 数量
--------------------------------------
电视 东门 100
电视 华强 150
冰箱 东门 50
冰箱 华强 80
... ... ...
转化为:
商品 东门 华强 .....
-----------------------------------------
电视 100 150
冰箱 50 80
(请注意!分店数量不是固定的。)
Create table TEST
(商品 Nvarchar(10),
分店 Nvarchar(10),
数量 Int)
--插入数据
Insert TEST Values(N'电视', N'东门', 100)
Insert TEST Values(N'电视', N'华强', 150)
Insert TEST Values(N'冰箱', N'东门', 50)
Insert TEST Values(N'冰箱', N'华强', 80)
GO
--创建视图
declare @dbname sysname
set @dbname=db_name()
exec('
create view v_qry
as
select * from openrowset(''sqloledb'',''Trusted_Connection=yes;database='+@dbname+'''
,''
Declare @S Nvarchar(4000)
Set @S=N''''Select 商品''''
Select @S=@S+N'''',SUM(Case When 分店=N''''''''''''+分店+N'''''''''''' Then 数量 Else 0 End) As N''''''''''''+分店+''''''''''''''''
from (Select Distinct 分店 from TEST ) A Order By 分店
Select @S=@S+N'''' from TEST Group By 商品 Order By 商品''''
EXEC(@S)'')')
go
--调用视图实现查询
select * from v_qry
go
--删除测试
drop table test
drop view v_qry
/*--结果
商品 东门 华强
---------- ----------- -----------
冰箱 50 80
电视 100 150
(所影响的行数为 2 行)
--*/
--------------------------------------
电视 东门 100
电视 华强 150
冰箱 东门 50
冰箱 华强 80
... ... ...
转化为:
商品 东门 华强 .....
-----------------------------------------
电视 100 150
冰箱 50 80
(请注意!分店数量不是固定的。)
Create table TEST
(商品 Nvarchar(10),
分店 Nvarchar(10),
数量 Int)
--插入数据
Insert TEST Values(N'电视', N'东门', 100)
Insert TEST Values(N'电视', N'华强', 150)
Insert TEST Values(N'冰箱', N'东门', 50)
Insert TEST Values(N'冰箱', N'华强', 80)
GO
--创建视图
declare @dbname sysname
set @dbname=db_name()
exec('
create view v_qry
as
select * from openrowset(''sqloledb'',''Trusted_Connection=yes;database='+@dbname+'''
,''
Declare @S Nvarchar(4000)
Set @S=N''''Select 商品''''
Select @S=@S+N'''',SUM(Case When 分店=N''''''''''''+分店+N'''''''''''' Then 数量 Else 0 End) As N''''''''''''+分店+''''''''''''''''
from (Select Distinct 分店 from TEST ) A Order By 分店
Select @S=@S+N'''' from TEST Group By 商品 Order By 商品''''
EXEC(@S)'')')
go
--调用视图实现查询
select * from v_qry
go
--删除测试
drop table test
drop view v_qry
/*--结果
商品 东门 华强
---------- ----------- -----------
冰箱 50 80
电视 100 150
(所影响的行数为 2 行)
--*/