我的数据库中有这些数据
Batch_Leads CSP
BATCH 01_JUL 17_CURO NULL
BATCH 01_JUL 17_STR NULL
BATCH 02_JUL 17_SPI NULL
BATCH 01_JUL 17_SPI NULL
BATCH 03_JUL 17_CURO NULL
BATCH 02_JUL 17_CURO NULL
BATCH 01_JUL 17_CURO CURO
BATCH 02_JUL 17_CURO CURO
BATCH 03_JUL 17_CURO CURO
BATCH 01_JUL 17_CURO SPI
BATCH 02_JUL 17_SPI SPI
BATCH 01_JUL 17_SPI SPI
BATCH 01_JUL 17_STR Sterling
这是我到目前为止所做的工作
DECLARE @DateFrom date = '7/17/2017',
@DateTo date = '7/17/2017',
@CSP nvarchar(max) = N'CURO',
@Batch nvarchar(max) = 'BATCH 02_JUL 17_CURO'
DECLARE @DTimeFrom datetime,
@DTimeTo datetime
SET @DTimeFrom = @DateFrom
SET @DTimeTo = DATEADD(s,-1,CONVERT(Datetime,DATEADD(d,1,@DateTo)))
SELECT *--'1' as [SORT],'OverAll','FACTORS' as [Label],'Touched Leads',FORMAT(COUNT(*),'##,##0') as [Touched Leads],'SCPL' as [Link]
FROM [SCPL].[dbo].[SCPL_EOD_CSP]
WHERE [Date] BETWEEN @DateFrom AND @DateTo
AND
(
@Batch = 'All Batch'
OR
[BATCH_LEADS] COLLATE database_default IN ( SELECT value FROM dbo.FnSplit (@Batch,',')) --OR [BATCH_LEADS] <> NULL
)
--and [CSP] = @CSP
它工作正常如果我指定Batch_Leads
和CSP
它将显示我过滤的所有Batch_Leads
甚至CSP
都为空(因为我没有使用CSP作为过滤器。但是,如果我在CSP中指定CURO
而在All Batch
指定Batch_Leads
则会显示包括Sterling
在内的所有数据,因为我没有使用CSP
列过滤但是当我使用CSP
时,它不会显示带有null的数据。这就是为什么我对它进行评论。如果我在CSP CURO
中指定,是否可以显示所有带有CURO
的批量导向?是{{ 1}}是唯一的方法吗?因为我不想使用LIKE
因为我认为将来我可能会遇到问题
答案 0 :(得分:1)
如果你想使用
@CSP
或
BATCH_LEADS
作为过滤器,您真正需要做的就是:
SELECT *--'1' as [SORT],'OverAll','FACTORS' as [Label],'Touched Leads',FORMAT(COUNT(*),'##,##0') as [Touched Leads],'SCPL' as [Link]
FROM [SCPL].[dbo].[SCPL_EOD_CSP]
WHERE [Date] BETWEEN @DateFrom AND @DateTo
AND
(
@Batch = 'All Batch'
OR
[BATCH_LEADS] COLLATE database_default IN ( SELECT value FROM dbo.FnSplit (@Batch,','))
OR isnull([BATCH_LEADS],'') <> ''
)
and isnull([CSP],'') = @CSP
答案 1 :(得分:1)
我猜你想要两件事之一:
(1)有时您希望按@CSP
进行过滤,但有时您不想按此过滤。
然后,当您想忽略过滤器时,请执行以下操作:
SET @CSP = NULL
在你的WHERE
条款中,请始终保留此信息:
AND [CSP] = ISNULL(@CSP, [CSP])
您也可以对批次执行相同操作,而不是撰写文本&#39;所有批处理&#39;。
(2)当您按@CSP
过滤时,您还希望显示NULL
。
然后,您可以将其添加到您的WHERE
子句:
AND ISNULL([CSP], @CSP) = @CSP
希望我能猜对你。