Альтернатива простого UNION на sql сервере - PullRequest
1 голос
/ 09 апреля 2020

Можно ли написать приведенный ниже запрос как отдельный запрос без объединения, когда мы выбираем записи из той же таблицы?

Select Primary_Employee From Employee e
UNION
Select Secondary_Employee From Employee e

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

VALUES таблица значений cosntructor и CROSS APPLY является опцией:

SELECT DISTINCT v.Employee
FROM Employee e
CROSS APPLY (VALUES (Primary_Employee), (Secondary_Employee)) v(Employee)
0 голосов
/ 09 апреля 2020

Да, в этом конкретном c случае, когда он читает из одной таблицы, вы можете использовать UNPIVOT:

SELECT DISTINCT u.col
FROM employee
UNPIVOT (col FOR Employee IN (Primary_Employee, Secondary_Employee)) AS u;

db <> fiddle demo

0 голосов
/ 09 апреля 2020

Вы можете эмулировать это поведение с помощью перекрестного соединения и применить distinct к результату (поскольку union, в отличие от union all возвращает различные значения), но, если честно, это значительно менее элегантно, чем использование union .

SELECT DISTINCT COALESCE(primary_employee, secondary_employee)
FROM   (SELECT primary_employee AS primary_employee, NULL AS secondary_employee
        FROM   employee
        CROSS JOIN
        SELECT NULL, secondary_employee
        FROM   employee) t
...