SQL-Abfrage erhalten COLUMN1-Wert auch COLUMN 2 hat Wert oder NULL

Ich habe diese data in meiner database

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 

Und hier ist was ich jetzt so weit mache

 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 

Es funktioniert gut Wenn ich Batch_Leads und CSP spezifiziere, Batch_Leads es alle Batch_Leads ich gefiltert habe, auch wenn das CSP null ist (weil ich das CSP nicht als Filter verwendet habe. Wenn ich aber CURO in CSP und All Batch für Batch_Leads , wird alles angezeigt data, einschließlich Sterling weil ich nicht mit CSP Spalte filtern, aber wenn ich CSP , wird es keine data mit null anzeigen.Das ist, warum ich es kommentieren.Es ist es möglich, alle Batchleads mit CURO wenn ich in CSP CURO spezifiziert ist, ist die LIKE der einzige path, weil ich nicht wollen, um LIKE zu verwenden, weil ich glaube, ich könnte ein Problem damit in der Zukunft haben

Wenn du willst

@CSP

oder

BATCH_LEADS

als Filter, alles was Sie wirklich tun müssen, ist:

 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 

Ich vermute, du willst entweder eins von zwei Dingen:

(1) Manchmal möchtest du dich bei @CSP filtern, aber manchmal willst du es nicht filtern.

Dann, wenn du den Filter ignorieren möchtest, mach das:

 SET @CSP = NULL 

Und in deiner WHERE Klausel behalte das immer:

 AND [CSP] = ISNULL(@CSP, [CSP]) 

Du könntest auch das gleiche für Batch tun, anstatt den Text 'All Batch' zu schreiben.

(2) Wenn du bei @CSP , willst du auch NULL @CSP .

Dann könntest du das einfach zu deiner WHERE Klausel hinzufügen:

 AND ISNULL([CSP], @CSP) = @CSP 

Hoffentlich rate ich dir recht.