Получить четкий из двух столбцов


Я хочу получить внятный двух столбцов из таблицы SQL. Я могу оптимизировать этот запрос?

create TABLE #Temporary_tbl
(                              
    ProductColour VARCHAR(50),
    ProductSize VARCHAR(20),
)

insert into #Temporary_tbl (ProductColour)
select distinct productcolour
from shoptransfer

insert into #Temporary_tbl (ProductSize)
select distinct ProductSize
from shoptransfer

select * from #Temporary_tbl


778
5
задан 7 апреля 2011 в 05:04 Источник Поделиться
Комментарии
2 ответа

Это даст вам тот же результат, что ваш SQL.

select distinct ProductColour, null as ProductSize
from shoptransfer

union all

select distinct null as ProductColor, ProductSize
from shoptransfer

Вы на самом деле не нужны ", как" Положение о второй выбор, но я считаю, это хорошо для удобочитаемости.

Наконец, SQL-сервер в основном будет делать то же самое, но убрав явную временную таблицу и положить все это на одну команду, вы даете SQL сервера больше шансов сделать два выбирает параллельно.

5
ответ дан 7 апреля 2011 в 08:04 Источник Поделиться

SELECT DISTINCT
CASE x.f WHEN 1 THEN s.ProductColour END AS ProductColour
CASE x.f WHEN 2 THEN s.ProductSize END AS ProductSize
FROM shoptransfer s
CROSS JOIN (SELECT 1 UNION ALL SELECT 2) x (f)

Это производит тот же вывод, что решение Брайана. Идея в том, чтобы сделать каждую строку shoptransfer выход два раза без сканирования таблицы дважды. Это достигается за счет перекрестного вступления на стол крошечный стол вяжутся, созданные "на лету". Когда вяжутся таблицы первая строка является текущей, этот запрос вернет строку со значением null в качестве ProductColour и ProductSize, а второй раз наоборот, т. е. ProductColour null и ProductSize содержит значение от shoptransfer стол.

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


  1. (Выбрать 1 объединить все выбрать 2) х (ф)

  2. (Выбрать 1 как союз F все выбрать 2) х

4
ответ дан 1 июня 2011 в 02:06 Источник Поделиться