Объединение таблиц в SQL / QlikView - PullRequest
1 голос
/ 16 ноября 2009

Можно ли объединить 2 таблицы с объединением или аналогичной конструкцией, чтобы все несовпадающие поля в одной группе Что-то вроде этого: Все сотрудники с названием отдела получают реальный отдел, а все без отдела попадают в группу «Другое».

Департамент: SectionDesc ID
Dep1 500
Dep2 501

Сотрудник: Имя ID
Андерс 500
Эрик 501
корень 0

Выход: Андерс Деп1
Эрик Деп2
root Другое

С наилучшими пожеланиями Андерс Олме

1 Ответ

3 голосов
/ 16 ноября 2009

То, что вы ищете, это внешнее соединение:

 SELECT e.name, d.name
 FROM employee e 
 LEFT OUTER JOIN departments d ON e.deptid = d.deptid

Это даст вам имя d.NULL для каждого сотрудника без отдела. Вы можете изменить это на «Другое» примерно так:

CASE WHEN d.name IS NULL THEN 'Other' Else d.name END 

(Существуют другие, более простые версии для разных СУБД, но это должно работать для большинства.)

QlikView немного сложнее, так как все объединения в QlikView по умолчанию являются внутренними соединениями. В интерактивной справке обсуждается вопрос о различных объединениях. Короткая версия заключается в том, что вы можете создать новую таблицу на основе различных объединений в сценарии, который считывает ваши данные. Таким образом, у вас может быть что-то вроде этого в вашем скрипте:

Emps: SELECT * FROM EMPLOYEES;
Deps: SELECT * FROM DEPARTMENTS;
/* or however else you get your data into QlikView */

EmpDep:
SELECT Emps.name, Deps.name
FROM EMPS LEFT JOIN Deps

Чтобы это объединение работало, имена столбцов для объединения должны быть одинаковыми в обеих таблицах. (При необходимости вы можете создать новые столбцы для объединения при загрузке базовых таблиц.)

...