У меня есть следующий запрос, который получает в результате языка, говорящего сотрудника и его соответствующий уровень:

SELECT E.EmployeeId
        ,ISNULL(L.ID ,0) AS LanguageId
        ,L.Label AS Language,
        ll.Label AS LanguageLevel
         FROM Employee e
LEFT JOIN AF_AdminFile aaf ON e.AdminFileId = aaf.AdminFileId
LEFT JOIN AF_Language al ON aaf.AdminFileId = al.AdminFileId
LEFT JOIN Language l ON al.LanguageId = l.ID
LEFT JOIN LanguageLevel ll ON al.LanguageLevelId = ll.LanguageLevelId
ORDER BY e.EmployeeId

Результат такой, как показано ниже:

enter image description here

Для сотрудника с сотрудником CovereeeID = 6 он говорит по-английски / свободно, испаннен / хороший, французский / родной язык.
Знание, что у меня 187 разных языков на моем языке таблицы и 4 языковых уровня в моем столе LangeaGelevel (ярмарка, свободно , Хороший, родной язык)

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

EmployeeId MotherTongue        Fluent
6          French              English
-1
Amira Bedhiafi 23 Сен 2019 в 13:06

1 ответ

Лучший ответ

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

SELECT
    e.EmployeeId,
    MAX(CASE WHEN ll.label = 'Mother Tongue' THEN l.label END) AS MotherTongue,
    MAX(CASE WHEN ll.label = 'Fluent' THEN l.label END) AS Fluent
FROM Employee e
LEFT JOIN AF_AdminFile aaf
    ON e.AdminFileId = aaf.AdminFileId
LEFT JOIN AF_Language al
    ON aaf.AdminFileId = al.AdminFileId
LEFT JOIN Language l
   ON al.LanguageId = l.ID
LEFT JOIN LanguageLevel ll
   ON al.LanguageLevelId = ll.LanguageLevelId
GROUP BY
    e.EmployeeId
ORDER BY
    e.EmployeeId;
3
Tim Biegeleisen 23 Сен 2019 в 10:18