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