在带 Pivot 的存储过程中返回空值

Returning Null Values in a Stored Procedure with Pivot

我需要 return 0 而不是存储过程中的空值。 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)

 ;

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

然后我突然想到,为什么不直接使用 SSRS 中的表达式来更改显示。类似于

=Iif(isnothing(amount.value), 0, amount.value)

现在对于未经请求的建议,您还可以在 SSRS 中使用 tablix 来使整个枢轴使用动态 sql 变得不必要。希望有所帮助:)