Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询获取列1值,即使列2有值或为NULL_Sql_Sql Server - Fatal编程技术网

SQL查询获取列1值,即使列2有值或为NULL

SQL查询获取列1值,即使列2有值或为NULL,sql,sql-server,Sql,Sql Server,我的数据库里有这些数据 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 0

我的数据库里有这些数据

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_Lead和CSP,它将显示我使用CSP筛选的所有Batch_Lead,即使CSP为空,因为我没有使用CSP作为筛选器,它也可以正常工作。但是,如果我在CSP和Batch_Lead的所有批次中指定CURO,它将显示包括Sterling在内的所有数据,因为我没有使用CSP列进行筛选,但当我使用CSP时,它将不会显示带有null的数据。这就是我评论它的原因。如果我在CSP CURO中指定,是否可以使用CURO显示所有BatchLead?这是唯一的办法吗?因为我不想用LIKE,因为我想如果你想用的话,我将来可能会遇到问题

@顾客服务提供商

批量生产线

作为过滤器,您真正需要做的是:

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
如果你想用

@顾客服务提供商

批量生产线

作为过滤器,您真正需要做的是:

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有时候你想按@CSP过滤,但有时候你不想按它过滤

然后,如果要忽略过滤器,请执行以下操作:

SET @CSP = NULL
在WHERE子句中,始终保留以下内容:

AND [CSP] = ISNULL(@CSP, [CSP])
您也可以对批处理执行相同的操作,而不是编写文本“All batch”

2按@CSP筛选时,您希望同时显示NULL

然后,您可以将其添加到WHERE子句中:


希望我猜你是对的。

我猜你想要两样东西中的任何一种:

1有时候你想按@CSP过滤,但有时候你不想按它过滤

然后,如果要忽略过滤器,请执行以下操作:

SET @CSP = NULL
在WHERE子句中,始终保留以下内容:

AND [CSP] = ISNULL(@CSP, [CSP])
您也可以对批处理执行相同的操作,而不是编写文本“All batch”

2按@CSP筛选时,您希望同时显示NULL

然后,您可以将其添加到WHERE子句中:


希望我猜你是对的。

尽管你的查询绝对正确。当我的@CSP='CURO'和@Batch='All Batch'时,它仍然不会显示带有带有CURO的批次线索的数据。对不起,先生,但它仍然不会显示所需的输出。请指定您要查找的结果集?我想我不太清楚你问题的措辞。虽然你的查询是绝对正确的。当我的@CSP='CURO'和@Batch='All Batch'时,它仍然不显示带有带有CURO的批次线索的数据。对不起,先生,但它仍然不显示所需的输出。请指定你要查找的结果集?我想我对你问题的措辞不太清楚。