2014-09-29 3 views
0

Я хочу получить отличные от двух столбцов таблицы SQL Server. Я получаю этот результат - могу ли я оптимизировать этот запрос?Оптимизировать запрос SELECT в SQL Server

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 

Я стараюсь это:

select distinct ProductColour, null as ProductSize 
from shoptransfer 

union all 

select distinct null as ProductColor, ProductSize 
from shoptransfer 
+3

Ваш запрос в порядке. В чем проблема? –

ответ

0

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

Colour  Size 
blue  10 
green  12 
orange  14 

несмотря на то, что нет никакой связи между синим & размером 10 и т.д. Это не большое представление данных, потому что происходит белый ru есть 5 цветов, но 100 размеров.

Вы можете сделать это, выбрав каждый из списков DISTINCT отдельно вместе с ROW_NUMBER(), а затем присоединитесь к номерам строк. На самом деле это не тот SQL, но я могу понять, что иногда вы хотите делать подобные вещи для объяснения причин.

например

select productSize, productColour 
from ( 
    -- get the colours and a row number 
    select productColour, row_number() over (order by productColour) as rownum 
    from (select distinct productColour from shoptransfer) as c1 
) as colours 
-- full outer join so the row numbers match and you get all the rows from both 
full outer join ( 
    -- get the sizes and a row number 
    select productSize, row_number() over (order by productSize) as rownum 
    from (select distinct productSize from shoptransfer) as s1 
) as sizes 
on colours.rownum = sizes.rownum 
0
;WITH CTE AS 
(
select ProductColour , null as ProductSize 
from shoptransfer 
GROUP BY ProductColour 

union all 

select null as ProductColor, ProductSize 
from shoptransfer 
GROUP BY ProductSize 
) 
SELECT * FROM CTE 
0

зависит, как вы хотите представить данные здесь другое предложение может быть + PIVOT

select * from (
    SELECT distinct  
    [ProductColor] as 'tata_column', 'ProductColor' as 'P_TAG'  
    FROM shoptransfer 
union all 
    SELECT distinct 
    [ProductSize] as 'data_colunm' , 'ProductSize' as 'P_TAG' 
    FROM shoptransfer 
    ) A 

Я уничтожу таблицы TEMP, чтобы запустить его быстрее

Пожалуйста, обратите внимание, что ИСПОЛЬЗОВАНИЕ «С ПРОВЕРКОЙ» с ОГРАНИЧЕННЫМИ ЗАПИСИМИ УСТАНАВЛИВАЕТСЯ МЕДЛЕННО И, возможно, сбой сервера!

Смежные вопросы