2016-08-17 5 views
0

У меня небольшая проблема с запросом SQL Server.Пробл с группировкой SQL-запросов

У меня проблема с моим представлением нескольких базовых таблиц с повторяющимися значениями, до сих пор не проблема, эти дубликаты логичны. К сожалению, я не получаю желаемого конечного результата, я мог бы это сделать, программируя переднюю часть моего приложения, но я бы предпочел сделать работу на сервере.

Я объясню принцип: У меня есть 30 компаний, каждая из которых имеет стол сотрудника. Мое мнение - это объединение 30 столов сотрудников. Каждый сотрудник имеет уникальный серийный номер, номер один и тот же в таблицах, поэтому сотрудник компании «Джон Доу» с идентификационным номером «S0000021» может быть нанят в компании «А», а затем без проблем перенесен в компанию Q, он сохранит серийный номер «S0000021».

Разница между данными из таблиц Employee A и Q будет в этом примере датами начала (найма) и выпуска (переноса), введенными для компании A, и только датой начала для компании Q, поэтому у представления будет 2 линии для «Джон Доу».

12 общие поля являются следующие:

  • Серийный номер (Идентичные в каждой таблице сотрудников)
    • Номер социального страхования (тот же в каждой таблице сотрудников)
    • Start/Hire Дата
    • Дата выпуска/передачи (пустая/недействительная, если работник является текущим)
    • Название (может меняться через компании, если человек разводится)
    • Имя
    • Девичья фамилия
    • Фамилия
    • Пол
    • Final Год выхода
    • БЕ

Проблема, кажется, просто, что я не стал бы показаться, что последняя информацию сотрудника, за исключением группы, если она изменила имя или дату выпуска, она будет отображаться дважды.

Я попытался следующие различные способы, но они не возвращают то, что я хочу

Я вернулся результаты оба пути, но я всегда вижу дубликаты, потому что мои даты в компаниях никогда не идентичны, и их название может измениться.

Извините за этот перевод Google.

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 

En français Bonjour à Туа,

Je стычка ООН Пети problème де Taille Сюр ипе requête SQL Serveur.

Я в конечном зрения нескольких базы с повторяющимися значениями, до сих пор нет проблем, эти дубликаты логичны. К минусам я не получаю желаемый конечный результат, я мог бы сделать это путем программирования груди моего приложения, но я предпочел бы работать сервер.

Объясняет принцип: я 30 базы компании с в каждом из них таблицы сотрудников. мой взгляд запрос на объединение таблиц 30 сотрудников. каждый сотрудник уникальный серийный код, код следует так же, если он меняет общество, поэтому сотрудник нома «Джон Do» с регистрационным номером «S0000021» может быть создан в компании А затем передаются в компания Q без каких-либо проблем, он сохранит серийный номер «S0000021.

Разница между данными из таблицы Employee А и Q будет это например, даты въезда и выезда введена для компании А и только в день вступления в фирму Q против в вид имеет хорошие 2 линии для «John Do».

12 общие поля: - Ролл (идентично в каждой базе) - Номер социального страхования (То же, каждой базе) - Дата вступления - Release (пустой, если работник всегда присутствует) - имя (может измениться, если развод люди) - Первый - девичья фамилия - Второе имя - Пол - Выход Final - Код компании

проблемы кажется простым Я хочу п «Аппар AISSE последней информации сотрудника, за исключением группы по, если он изменил имя или дату выпуска, он будет отображаться в два раза.

Я тестировал следующее differant пути, но ничего неоспоримого

Я вернулся запросы во всех отношениях, но я всегда прибегаю дубликаты, потому что мои даты никогда не совпадают, а название может измениться.

Извините за этот перевод Google.

+1

Можете ли вы предоставить простой пример источника данных и требуемой продукции? Показать по крайней мере, 2 или 3 сценариев, используемых. – SMM

+0

мой французский беден, цель вы хотите максимальную зарплатный золота Самые последние зарплаты на одного работника в компании, и каждый сотрудник может иметь, был в нескольких компаниях, и каждая компания в ICTS собственную таблицу? Ваше мнение, что 30 сотрудника объединение таблицы вместе? Я думаю, – Beth

+1

Они просто ищут последнюю запись (вероятно, выпущенную по дате).Возможно row_number разделение с одним идентификатором сотрудник будет работать цели я прыгал Они могли бы обеспечить некоторые выборочные данные, прежде чем ответить – SMM

ответ

0

I ПРИНИМАЕТСЯ Следующий:

  • есть вид (зрение), что уже собирает все данные от каждого из 30 компаний
  • вы просто ищете последнюю запись для каждого сотрудника

Если вам нужно, чтобы увидеть записи aussi для каждого изменения имен мы можем изменить это.

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

Здравствуйте, У меня не было предмета в голове. Большое спасибо, что я хотел. – user2769000