这是我的表
EmpID EmpName CompanyName CompanyID 123 Josep Kramer Levin Naftalis & Frankel LLP 468 123 Josep Thompson Hine LLP 567 801 Simon Ogletree Deakins International LLP 222 801 Simon Ogletree, Deakins, Nash PC 916 602 alen Baker Co Ltd 732 602 alen Baker Mcken Ltd 242
条件是结果将返回,如果公司名称的第一个单词不相同,例如: Baker 和 Ogletree 这些单词不止一次,所以它不是包括结果
我的输出
EmpID EmpName Company Name CompanyID 123 Josep Kramer Levin Naftalis & Frankel LLP 468 123 Josep Thompson Hine LLP 567
答案 0 :(得分:0)
这是为Oracle编写的:
SELECT *
FROM (SELECT table.*,
LEAD(company, 1) OVER (PARTITION BY empid ORDER BY companyid) AS next_company
FROM table)
WHERE SUBSTR(company, 0, INSTR(company, ' ') - 1) != SUBSTR(next_company, 0, INSTR(next_company, ' ') - 1) AND next_company IS NOT NULL;
编辑:我现在看到你评论说你正在使用SQL Server。它可能没有什么不同,但我没有技能来帮助解决这个问题。
答案 1 :(得分:0)
我解释这意味着您希望所有员工在公司名称中使用不同的第一个单词,其中第一个单词用空格分隔。
您可以将窗口函数与字符串函数结合使用来获取此信息:
select t.*
from (select t.*,
min(left(company, charindex(' ', company + ' '))) over (partition by empid) as minfirstword,
max(left(company, charindex(' ', company + ' '))) over (partition by empid) as maxfirstword
from t
) t
where minfirstword <> maxfirstword;
Here是一个SQL小提琴。
答案 2 :(得分:0)
你可以试试这样的东西
create table #EmployeeTemp (EmpID int, Name nvarchar(100), Company nvarchar(100), CompanyID int)
insert into #EmployeeTemp (EmpID, Name, Company, CompanyID)
values
(11, 'Alberto', 'Baker Mec Ltd', 25),
(11, 'Alberto', 'Baker rel LLP', 26),
(12, 'Ameez', 'Baker Mec Ltd', 25),
(12, 'Ameez', 'Wrong Part LLP', 27)
Select EmpID, FirstWord, Count(FirstWord) as 'Counted', Count(FirstWord) over (partition by EmpID,FirstWord) 'CountByWord'
into #EmployeeFinal
from (
SELECT EmpID, CASE CHARINDEX(' ', Company, 1)
WHEN 0 THEN Company
ELSE SUBSTRING(Company, 1, CHARINDEX(' ', Company, 1) - 1)
END as 'FirstWord'
from #EmployeeTemp) src
group by EmpID, FirstWord
Select * from #EmployeeFinal where Counted = 1 and CountByWord = 1
因此,您只会选择公司的第一个单词,计算员工重复该单词的次数,然后仅选择您想要的单词
结果如下:
EmpID FirstWord Counted CountByWord
12 Baker 1 1
12 Wrong 1 1