刚刚得到解决的交叉表问题,自己加了日期范围条件,报错从字符串转换为datetime 时发生语法错误
ALTER   PROCEDURE   存储过程9 
 ( 
 @begin   datetime,@end   datetime 
 ) 
 AS 
 	DECLARE   @s   varchar(8000) 
 	SET   @s=    ' ' 
 	SELECT   @s=@s 
 	+ ', '+QUOTENAME(费用名称) 
 	+ '=SUM(CASE   费用名称   WHEN    '+QUOTENAME(费用名称, ' ' ' ') 
 	+ '   THEN   金额   ELSE   0   END) ' 
 	FROM   sz_vi所有收支   where   (日期   BETWEEN    ' ' '+convert(char(10),@begin,120)+ ' ' '   AND    ' ' '+convert(char(10),@end,120)   + ' ' ')                      
                            GROUP   BY   费用名称 
 	SELECT   @s=@s 
 	+ ' 
 	,   SUM(CASE   方向   WHEN    ' '收入 ' '   THEN   金额   ELSE   0   END)   As   收入 
 	,   SUM(CASE   方向   WHEN    ' '支出 ' '   THEN   金额   ELSE   0   END)   As   支出 
 	,   SUM(CASE   方向   WHEN    ' '收入 ' '   THEN   金额   WHEN    ' '支出 ' '   THEN   -   金额   ELSE   0   END)   As   结余 
 	FROM   sz_vi所有收支   where   (日期   BETWEEN    ' ' '+convert(char(10),@begin,120)+ ' ' '   AND    ' ' '+convert(char(10),@end,120)   + ' ' ') ' 
 	EXEC( 'SELECT   Convert(Varchar(10),   日期,   120)   As   日期 '   +   @s+    '   GROUP   BY   日期 '   +    '   Union   All    '   +    'SELECT    ' '合计 ' ' '   +   @s)    
------解决方案--------------------ALTER PROCEDURE 存储过程9 
 ( 
 @begin datetime,@end datetime 
 ) 
 AS 
 	DECLARE @s varchar(8000) 
 	SET @s=  ' ' 
 	SELECT @s=@s 
 	+ ', '+QUOTENAME(费用名称) 
 	+ '=SUM(CASE 费用名称 WHEN  '+QUOTENAME(费用名称, ' ' ' ') 
 	+ ' THEN 金额 ELSE 0 END) ' 
 	FROM sz_vi所有收支 where 日期 BETWEEN @begin AND @end   --这样就可以        
          GROUP BY 费用名称 
 	SELECT @s=@s 
 	+ ' 
 	, SUM(CASE 方向 WHEN  ' '收入 ' ' THEN 金额 ELSE 0 END) As 收入 
 	, SUM(CASE 方向 WHEN  ' '支出 ' ' THEN 金额 ELSE 0 END) As 支出 
 	, SUM(CASE 方向 WHEN  ' '收入 ' ' THEN 金额 WHEN  ' '支出 ' ' THEN - 金额 ELSE 0 END) As 结余 
 	FROM sz_vi所有收支 where (日期 BETWEEN  ' ' '+convert(char(10),@begin,120)+ ' ' ' AND  ' ' '+convert(char(10),@end,120) + ' ' ') ' 
 	EXEC( 'SELECT Convert(Varchar(10), 日期, 120) As 日期 ' + @s+  ' GROUP BY 日期 ' +  ' Union All  ' +  'SELECT  ' '合计 ' ' ' + @s)    
------解决方案--------------------其实你的代码只要是如下就行了.不需要转换 
 日期 BETWEEN @begin AND @end
------解决方案--------------------再修改下   
 ALTER PROCEDURE 存储过程9 
 ( 
 @begin datetime,@end datetime 
 ) 
 AS 
 	DECLARE @s varchar(8000) 
 	SET @s=  ' ' 
 	SELECT @s=@s 
 	+ ', '+QUOTENAME(费用名称) 
 	+ '=SUM(CASE 费用名称 WHEN  '+QUOTENAME(费用名称, ' ' ' ') 
 	+ ' THEN 金额 ELSE 0 END) ' 
 	FROM sz_vi所有收支 where (日期 BETWEEN @begin AND @end)  --只有這一處修改 
          GROUP BY 费用名称 
 	SELECT @s=@s 
 	+ ' 
 	, SUM(CASE 方向