Как объединить данные из двух столбцов в один без использования UNION и JOIN?

Как объединить данные из двух столбцов в один без использования UNION и JOIN?

Моисеенко С.И. (22-08-2008)

Такие вопросы с завидной регулярностью появляются на страницах различных форумов. К слову сказать, для меня до сих пор остается загадкой, почему при этом ставится дополнительное условие не использовать UNION и/или JOIN. Могу лишь предположить, что это вопросы, которые задают на собеседовании при приеме на работу.

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

Создадим тестовую таблицу и добавим в нее немного данных:

CREATE TABLE T (

col1 INT

, col2 INT

)

GO

INSERT INTO T

SELECT 1, 1

UNION ALL SELECT 1, 3

UNION ALL SELECT NULL, NULL

UNION ALL SELECT NULL, 2

GO

Итак, имеется таблица T, которая содержит два столбца с данными одного типа:

SELECT col1, col2

FROM T

col1 col2

1 1

1 3

NULL NULL

NULL 2

Требуется получить следующий результат:

col

1

1

NULL

NULL

1

3

NULL 2

Мне известны три способа, реализуемых стандартными средствами интерактивного языка SQL.

1. UNION ALL

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

SELECT col1 col FROM T

UNION ALL

SELECT col2 FROM T