在带 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 变得不必要。希望有所帮助:)
我需要 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 变得不必要。希望有所帮助:)