2016-08-17 101 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