Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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将结果合并到where子句中的一个组中_Sql_Where Clause - Fatal编程技术网

SQL将结果合并到where子句中的一个组中

SQL将结果合并到where子句中的一个组中,sql,where-clause,Sql,Where Clause,我有一个问题 SELECT name, COUNT (name) FROM employee WHERE LOCATION IS LIKE (%%NY%%) GROUP BY name name coount alex m 10 alex.m 5 alex.ma 1 alex 500 我怎样才能把所有的alex合并成一个alex 所以我得到的输出是 name count alex 516 我需要一些类似于亚历克斯%%的东西,然后把它看作是亚历克斯 你需要得到

我有一个问题

SELECT name,
       COUNT (name)
FROM employee
WHERE LOCATION IS LIKE (%%NY%%)
GROUP BY name


name    coount
alex m  10
alex.m  5
alex.ma 1
alex    500
我怎样才能把所有的alex合并成一个alex

所以我得到的输出是

name count
alex 516

<>我需要一些类似于亚历克斯%%的东西,然后把它看作是亚历克斯

你需要得到名字的一部分。但这只适用于SQL Server。您没有指定正在使用的dbms。该查询适用于您的示例,但它也会选择Alexa、Alexander

SELECT LEFT(name, 4),
       SUM(coount)
FROM employee
WHERE LOCATION IS LIKE (%%NY%%)
GROUP BY LEFT(name, 4)

下面是SQL Server的动态解决方案

首先,让我们看看我处理的示例数据:

create table #temp
(name varchar(20))

insert into #temp values ('jack')
insert into #temp values ('jack rx')
insert into #temp values ('jack.a')
insert into #temp values ('jack.bb')
insert into #temp values ('jack.xy')
insert into #temp values ('brandon.12')
insert into #temp values ('brandon')
insert into #temp values ('brandon.k7s')
insert into #temp values ('brandon.bg')
insert into #temp values ('Jonathan')
然后,我们需要使用字符串运算符:

;with cte (name, charin, charin_space) as
( 
   select name,CHARINDEX('.',name,0) as charin, CHARINDEX(' ',name,0) as charin_space
   from #temp
)
select name,(case when charin = 0 and charin_space = 0 then name 
                  when charin = 0 and charin_space <> 0 then SUBSTRING(name,0,charin_space) 
                  when charin <> 0 and charin_space = 0 then SUBSTRING(name,0,charin) 
             end) as mainName
into #temp2
from cte

我希望有帮助

您正在使用哪个dbms?SUMCOONT而不是COUNTname。计算行数,在本例中为4行。这对于您的四种情况来说足够简单。但我想你也在寻找一个解决方案,比如将alice、alice m、alice.m和alice.ma分组。这就是您需要指定业务逻辑的地方。例如,您可能会说name=第一个空格或句点之前的所有字符。将Alexis和Alexander计算为Alex。@jarlh我只是根据OP的示例给出解决方案。它对超过4个字符的名字也不起作用。嗨,埃里克-完全回答了最初的问题,但我认为他们可能会想要一个解决方案来处理Alex的多个变体。可能值得在您的答案中添加一行,说明有限的使用案例。数据也有空间,如alex mAah刚刚注意到的,我们需要另一列,如charin_空间,然后在案例陈述中使用它。我将在几个小时后回到电脑后更新答案。
select t2.MainName,COUNT(t2.MainName)
from #temp t1
inner join #temp2 t2 on t1.name = t2.name
group by t2.mainName