Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 server SQL-如何声明要在查询中使用的一组人名?_Sql Server_Tsql_Where_Having_Declare - Fatal编程技术网

Sql server SQL-如何声明要在查询中使用的一组人名?

Sql server SQL-如何声明要在查询中使用的一组人名?,sql-server,tsql,where,having,declare,Sql Server,Tsql,Where,Having,Declare,我将同时运行5个查询以返回5组不同的数据-它们的共同点是我的以下陈述: HAVING ( LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%BRIAN%MILLER%') OR LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%LATEASHA%CALVERT

我将同时运行5个查询以返回5组不同的数据-它们的共同点是我的以下陈述:

HAVING  (   LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%BRIAN%MILLER%') OR 
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%LATEASHA%CALVERT%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CHERITA%MARTIN%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CARMALITA%MCQUEEN%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CRAIG%NADRATOWSKI%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SCOTT%SMOLINSKI%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%ALISHA%WILLIAMS%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SHANNON%MURPHY%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%MICHELLE%COLE%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%ROGER%KONKEL%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%DANIELLE%JONES%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%SABRINA%WARNER%') OR
        LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', comm.LONG_COMM_LINE_1) - 2) LIKE ('%CORINNE%DUBETZ%'))
我想在我的查询开始时定义这些人,以便稍后在having语句或where语句中使用,基本上是说

HAVING (left(comm.LONG_COMM_LINE_1, CHARINDEX('-',comm.LONG_COMM_LINE_1) - 2) LIKE [anyone that I've already defined above]

我不确定这是否可能,或者我会怎么做。任何帮助都将不胜感激

要展开Alex K的评论,可以从table变量开始:

DECLARE @People TABLE ([Name] VARCHAR(128)); 
INSERT @People VALUES ('%BRIAN%MILLER%'),('%LATEASHA%CALVERT%'),('%CHERITA%MARTIN%')
现在假设我有一个成员表,我需要根据您的条件查找该表中的成员,查询可能如下所示,我只是按名称分组以符合您的示例:

SELECT 
    M.[Name]
FROM 
    mem.Member M
GROUP BY 
    M.[Name]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE M.Name LIKE P.Name))
SELECT 
    comm.[LONG_COMM_LINE_1]
FROM 
    comm
GROUP BY 
    comm.[LONG_COMM_LINE_1]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE  LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', 
comm.LONG_COMM_LINE_1) - 2) LIKE P.Name))
更具体地说,对于您的示例:

SELECT 
    M.[Name]
FROM 
    mem.Member M
GROUP BY 
    M.[Name]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE M.Name LIKE P.Name))
SELECT 
    comm.[LONG_COMM_LINE_1]
FROM 
    comm
GROUP BY 
    comm.[LONG_COMM_LINE_1]
HAVING 
    (EXISTS(SELECT 1 FROM @PEOPLE P WHERE  LEFT(comm.LONG_COMM_LINE_1, CHARINDEX('-', 
comm.LONG_COMM_LINE_1) - 2) LIKE P.Name))

您可以将这些名称存储在临时表中,然后使用临时表的WHERE in子查询将它们放在临时表/表变量中,您可以使用LIKE进行内部联接。这似乎不适合使用,请尝试移动到WHERE。谢谢提示!我忘了提到我没有创建临时表的权限-查询失败:声明@PEOPLE表名varchar128中的OAs;插入@PEOPLE值“%BRIAN%MILLER%”、“%LATEASHA%CALVERT%”、“%CHERITA%MARTIN%”……另一个选项是使用多次引用的CTE。唯一的问题是,它只能用于该语句。是的,CTE也是一个选项。但是我想如果这个表会有很长的使用寿命,就像马克在评论中暗示的那样,如果有人离开这个团队,或者被加入,我不想更新5个地方的名单,那么我会诚实地把它放在一个普通的表中。CTE和TABLE变量几乎暗示它是一次性的,但这条评论告诉我它不是。