刚刚得到解决的交叉表问题,自己加了日期范围条件,报错从字符串转换为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 方向