2016-08-17 74 views
0

我有一个SQL Server查询的小问题。Problèm与SQL选择分组

我有一个与我的观点的重复值的几个基表的问题,迄今没有问题,这些重复是合乎逻辑的。不幸的是,我没有得到期望的最终结果,我可以通过编程我的应用程序的前端来完成,但我更愿意在服务器上完成这项工作。

我会解释一下原理: 我有30家公司,每家公司都有员工表。 我的观点是30个员工表的联合。 每个员工都有一个唯一的序列号,号码在表中是相同的,所以名为“John Doe”的ID号为“S0000021”的员工可以在A公司雇用,然后转移到公司Q,没有任何问题,他会保留序列号“S0000021”。

员工表A和Q中的数据之间的差异将在此示例中为公司A输入的开始(租用)和发布(转移)日期以及公司Q的开始日期,因此该视图将具有2 “John Doe”的线条。

12个公共字段有以下几种:

  • 序列号(每个员工表相同)
    • 社会安全号码(每个员工表中相同。)
    • 开始/聘用日期
    • 发布/转移日期(如果员工当前为空,则为空)
    • 姓名(如果离婚的人可以跨公司更改)
    • 婚前姓
    • 性别
    • 最终版发布
    • 公司代码

这个问题似乎很简单,我将不会出现,最新员工的信息除了分组以外,如果已更改姓名或发布日期,则会显示该信息两次。

我尝试了以下不同的方法,但他们不回我想要

我返回的结果是双向的,但我总是看到重复的,因为公司内部我的日期是从来没有相同的,他们的名字可能会改变。

对不起这个谷歌翻译。

1 -

select 
     vue.matricule, 
     vue.numsecu, 
     vue.name, 
     vue.lastname, 
     vue.maidenname, 
     vue.secondname, 
     vue.genre, 
     vue.released, 
     vue.companycode 

    from 
     vue 

    group by 
     vue.matricule, 
     vue.numsecu, 
     vue.name, 
     vue.lastname, 
     vue.maidenname, 
     vue.secondname, 
     vue.genre, 
     vue.released, 
     vue.companycode 

2 ---

select 
    distinct(vue.matricule), 
    vue.numsecu, 
    vue.name, 
    vue.lastname, 
    vue.maidenname, 
    vue.secondname, 
    vue.genre, 
    vue.released, 
    vue.companycode 

from 
    vue 

恩法语 的BonjouràTOUS,

济论战未叫小problème德taille河畔UNErequêteSQL Serveur。

我与重复值几个基站的端视图,到目前为止还没有问题,这些重复是逻辑。通过利弊我没有得到期望的最终结果,我可以通过编程我的应用程序的胸部,但我宁愿使用的服务器做。

我解释的原则:我今年30个 公司基地,在他们每个人的雇员表。 我的观点是对于30代雇员表的联合的请求。 每个员工的唯一序列码,代码如下相同的,如果它改变了社会,使员工诺姆“约翰待办事项”与登记号码“S0000021”可以在A公司则创建被转移到Q公司没有任何问题,它会保留序列号是“S0000021。

从A和Q的Employee表中的数据之间的差异将这个例子中,输入了A公司的进入和退出的日期,只是进入该公司由Q对在日鉴于有良好的2线“约翰待办事项”。

12个共同领域是: - 卷(每个碱基相同) - 社会安全号码(每个基地相同) - 进入 日期 - 发行(空如果员工总是存在) - 首先 - - 姓 - 第二个名字 - 性别 - 输出最终 - 公司代码

这个问题似乎很简单我想ñ名称(如果离婚的人) 改变“阿帕尔AISSE员工的最新信息,除了与一组通过,如果它已经改变了名称或发布日期,它会显示两次。

我测试了以下歧的方式,但没有确凿的

我回到查询以各种方式,但我总是诉诸重复,因为我的日期是永远不会相同,名称可能会改变。

对不起,这个谷歌翻译。

+1

您可以提供数据源和所需输出的一个简单的例子?显示使用至少2分或3的情况。 – SMM

+0

我的法语很差,目的所需的最大薪水黄金最近期的每家公司员工工资,每个员工可能具备的,已经在多个公司,每家公司是信息通信技术在自己的表?您鉴于30雇员工会表一起?我认为 – Beth

+1

他们只是在寻找最新的记录(可能是日期发布)。一个员工ID可能ROW_NUMBER分区会的工作目标,我是跳频他们能提供一些样本数据回答 – SMM

回答

0

我假设如下:

  • 有一种观点(景象)已经从每30家企业中收集的所有数据
  • 你只是在寻找最新记录每个员工

如果您需要查看的记录澳大利亚游泳对于每一个名称的改变,我们可以改变这一点。

--set up test data 
declare @vue table (
    matricule  varchar(20), 
    numsecu   varchar(20), 
    name   varchar(20), 
    lastname  varchar(20), 
    maidenname  varchar(20), 
    secondname  varchar(20), 
    genre   varchar(20), 
    start   datetime, 
    released  datetime, 
    companycode  varchar(20)); 

insert @vue values 
    ('S0000021','123456789','John', 'Doe',null,null,'M','2015-01-01','2015-12-31','A'), 
    ('S0000021','123456789','Johnny', 'Doe',null,null,'M','2016-01-01',null,'Q'),  --new company, name change, currently employed 
    ('S0000022','123456780','Jane', 'Doe',null,null,'M','2015-01-01','2015-12-31','A'), 
    ('S0000022','123456780','Jane', 'Doe',null,null,'M','2016-01-01','2016-02-01','Q'); --new company, name change, terminated 

select * from @vue order by matricule, start; 

--get latest record for each employee 
select * 
from (--add row numbering 
     select *, row_number() over (partition by matricule order by start desc) row_num 
     from @vue 
     ) vue2 
where vue2.row_num = 1; 
+0

:-)你好, 之前,我把问题与子查询,但一个是我做的所有方向我没有想到。给出的结果 谢谢是一个我想要的。 – user2769000

+0

你好,我有 转身此事在所有方向上的子查询,这个目的只有一个我没有想到。 由于结果的Merci beaucoup是一个我想要的。 – user2769000