仅返回公司名称

时间:2015-10-21 11:06:24

标签: sql sql-server

这是我的表

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

3 个答案:

答案 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