我需要在存储过程中返回0而不是null值。 Isnull不会在Pivot部分工作。我试图在SSRS报告中总结这些值,但由于存在空值,我只是空白。
USE [LTWS1]
GO
/****** Object: StoredProcedure [dbo].[QB_BALANCE_SHEET] Script Date: 6/29/2015 6:55:04 PM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[QB_BALANCE_SHEET]
@pDate datetime
as
SET NOCOUNT ON
declare @AccountRef_Fullname AS NVARCHAR(MAX)
select @AccountRef_Fullname = COALESCE(@AccountRef_Fullname + ',', '') + '['+ AccountRef_Fullname + ']'
from
(
select distinct fullname as AccountRef_Fullname
from account)pAccountRef_Full_Name
declare @Sql NVARCHAR(MAX)
set @Sql = N' SELECT [DATE], ' + @AccountRef_Fullname
+ 'from
(SELECT * from Balance_Summary_View
where [DATE] <= ''' + CAST(@pDate AS varchar(31)) + '''
)Account_Data '
+' PIVOT ('
+ ' sum(amount) for AccountRef_FullName in ('+ @AccountRef_Fullname +')'
+' ) AS PivotTable '
--+' )Data '
exec (@Sql)
;
答案 0 :(得分:1)
我想不出你可以修复SQL的方法,因为你需要在select中应用isnull,这很困难,因为你有一个动态选择列表。我玩弄了一个想法,建议在字符串上使用替换来放置isnulls,但是你无法通过简单的替换来正确地使用别名。
然后它击中了我,为什么不在SSRS中使用表达式来改变显示。
的内容=Iif(isnothing(amount.value), 0, amount.value)
现在,对于未经请求的建议,您还可以使用SSRS中的Tablix来使用动态sql不必使用整个数据透视表。希望有所帮助:)