如果返回的行都没有特定值,如何显示消息?
如果报告中的所有结果的状态均为“OK”,我想返回一条消息,表明没有警告。
我怎样才能做到这一点?史蒂夫
如果返回的行都没有特定值,如何显示消息?
如果报告中的所有结果的状态均为“OK”,我想返回一条消息,表明没有警告。
我怎样才能做到这一点?史蒂夫
我有一个报告,我想根据字段值排除大多数行。那部分并不难。我过滤掉的值是“OK”。所以最后报告只显示包含警告的行。通常只有 50-60 行中的一到两行。
我一直在使用表达式:
=IIF(Fields!ALERT_VALUE.Value = "OK", True, False) for the row.
现在我们进入棘手的部分。如果没有警告,那么我只会得到一个空报告。我想要做的是显示一条消息,表明没有警告。
因此,我创建了一个新行并在第一列中设置了这个表达式:
=IIF(Count(Fields!ALERT_VALUE.Value,"DataSet1")=0,"No Commitment Warnings", nothing)
并将可见性设置为:
=IIF(Count(Fields!ALERT_VALUE.Value,"DataSet1")=0,False,True)
但我什么也得不到。
我想我在某处读到我只是隐藏行而不是从报告中删除它们,所以我猜我的消息行仍然看到隐藏的行,这就是它不起作用的原因。
但我发誓我今天早上已经成功了,哈哈!
那么,有没有办法得到我想要做的事情?隐藏所有无警告行,如果没有警告行,显示消息?
今天早上我可以使用一些 SQL 帮助我是 SQL 新手,可以使用一些帮助。
我在 SSMS 中设置了一个存储过程,其目的是确定本季度迄今为止的服务交易总数。
它查看上一季度最后一笔交易的交易。例如 2020 年 6 月 30 日。发现这一点后,它开始计算本季度的交易总额。我们将交易称为“匹配”。
到目前为止,一切都很好。但是我发现了一个错误。我们经常有新账户或休眠账户,这些账户在上一季度根本没有交易,只是在本季度才开始交易。
因此,当存储过程查找上一季度的最后一笔交易但没有找到时,我会得到异常结果。
我猜我需要做的是设置查询,以便如果它没有找到上一季度的交易,它默认为零,因此其余的商店 proc 可以运行。
但我不确定如何做到这一点,或者这是否是最好的方法。
以下是我的代码,因此您可以看到我从哪里开始。请看一下,我将非常感谢有关如何进行的任何建议。
/****** Object: StoredProcedure [dbo].[sp_add_QTD_ICSMatch] Script Date: 7/13/2020 9:20:03 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_add_QTD_ICSMatch]
AS
BEGIN
--Alter Table [src].[ICSMatch]
--Add ICSQTDOutstanding decimal (18,2) null
--Alter Table [STG_ICSMatch]
--Add ICSQTDOutstanding decimal (18,2) null
DECLARE @lastQuaterEnd date,
@maxmatchdate date,
@lastQuarterOutstanding decimal(18,2),
@MaxMatchOutstanding decimal(18,2)
IF OBJECT_ID('tempdb.dbo.#QTD', 'U') IS NOT NULL
DROP TABLE #QTD;
CREATE TABLE #QTD (Tranid varchar(18),
Qtd decimal(18,2),
BankID int,
Matchdate date,
LastQuaterDate date
)
SET @maxmatchdate = (SELECT max(Match_date) FROM [src].[ICSMatch])
SET @lastQuaterEnd = (SELECT DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, @maxmatchdate), 0)) )-- Last day of last quarter
--Print @lastQuaterEnd
SET @lastQuaterEnd = (SELECT dbo.svf_getValidMatchDate(@lastQuaterEnd , 'ICS') )
--Print @lastQuaterEnd
;WITH lastQuarter as
(SELECT ICSMatch.ICSOutstanding , ICSMatch.BANK_ID ,ICSMatch.Match_date
FROM [src].[ICSMatch]
WHERE ICSMatch.Match_date = @lastQuaterEnd
),
ThisMatch AS
(
SELECT ICSMatch.ICSOutstanding , ICSMatch.BANK_ID , ICSMatch.ICSTRAN_ID , ICSMatch.Match_date
FROM [src].[ICSMatch]
WHERE ICSMatch.Match_date = @maxmatchdate
)
INSERT INTO #QTD
SELECT t.ICSTRAN_ID , (t.ICSOutstanding - l.ICSOutstanding) AS qtd , t.BANK_ID , t.Match_date , l.Match_date FROM
ThisMatch t
left join lastQuarter l on l.BANK_ID = t.BANK_ID
--where l.ICSOutstanding is not null
UPDATE ics
SET ics.ICSQTDOutstanding = q.Qtd
FROM src.ICSMatch ics
left join #QTD q ON ics.ICSTRAN_ID = q.Tranid
WHERE ics.Match_date = @maxmatchdate
END
非常感谢您的帮助。史蒂夫