使用Pivot返回存储过程中的空值

时间:2015-06-30 00:26:58

标签: sql-server stored-procedures reporting-services pivot ssrs-2012

我需要在存储过程中返回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)

 ;

1 个答案:

答案 0 :(得分:1)

我想不出你可以修复SQL的方法,因为你需要在select中应用isnull,这很困难,因为你有一个动态选择列表。我玩弄了一个想法,建议在字符串上使用替换来放置isnulls,但是你无法通过简单的替换来正确地使用别名。

然后它击中了我,为什么不在SSRS中使用表达式来改变显示。

的内容
=Iif(isnothing(amount.value), 0, amount.value)

现在,对于未经请求的建议,您还可以使用SSRS中的Tablix来使用动态sql不必使用整个数据透视表。希望有所帮助:)