日期:2014-05-18 浏览次数:20626 次
create table t1(支付ID int,支付名称 nvarchar(10)) insert into t1 select 1,'刷卡' insert into t1 select 2,'现金' insert into t1 select 3,'挂账' create table t2(支付信息ID int,支付方式ID int,支付金额 int,支付时间 DateTime) insert into t2 select 1,1,100,'2011-10-09 11:28:16.780' insert into t2 select 2,1,50,'2011-10-09 11:38:19.153' insert into t2 select 3,2,200,'2011-10-09 13:28:16.780' insert into t2 select 4,2,100,'2011-10-15 11:28:16.780' insert into t2 select 5,2,50,'2011-10-15 11:38:19.153' insert into t2 select 6,3,200,'2011-10-15 13:28:16.780' go declare @s nvarchar(max),@s1 nvarchar(max) --获得列标头[a],[b] select @s=isnull(@s+',','')+'sum(['+ltrim(支付id)+ ']) as ['+ 支付名称 +'金额]',@s1=isnull(@s1+',','')+'['+ltrim(支付id)+']' from t1 exec('select dt as 支付时间,'+@s+' from(select convert(varchar(10),支付时间,120)dt,'+@s1+' from t2 pivot(sum(支付金额) for 支付方式ID in('+@s1+'))b)t group by dt') go drop table t1,t2 go
------解决方案--------------------
可能有些地方不会兼容很好吧
------解决方案--------------------
不会。
但不建议这样,除了在兼容性上有差异,
在数据库操作上也存在隐患 (可能因数据库再脱机、分离导致不可用)。
如果确定采用该方式,勤做备份,指定有效备份策略。