Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как обойтись без UNION?  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Есть вот такой код.
Проблема в том что нужно сложить вместе порядка 50 полей, а записей в таблице несколько миллионов.
Получается что каждый UNION сканирует всю таблицу сверху до низу.

Киньте идею как это оптимизировать и обойтись без UNION.

BEGIN TRAN

CREATE TABLE #ABC(id int identity(1,1), f1 char(1), f2 char(1) )
INSERT INTO #ABC(f1,f2) VALUES('A','B')
INSERT INTO #ABC(f1,f2) VALUES('C','D')

SELECT ID, f1 as ff, 1 as Field FROM #ABC UNION
SELECT ID, f2 as ff, 2 as Field FROM #ABC 

ROLLBACK
26 янв 12, 17:44    [11978126]     Ответить | Цитировать Сообщить модератору
 Re: Как обойтись без UNION?  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
unpivot
26 янв 12, 17:48    [11978182]     Ответить | Цитировать Сообщить модератору
 Re: Как обойтись без UNION?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
SandalTree,

SELECT t.id, tt.ff, tt.field
FROM #ABC t
CROSS APPLY (VALUES
	(f1, 1), (f2, 2)
) tt (ff, field)


это если версия позволяет
26 янв 12, 17:48    [11978193]     Ответить | Цитировать Сообщить модератору
 Re: Как обойтись без UNION?  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Спасибо. Теперь понятно как и куда копать.
26 янв 12, 18:03    [11978384]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить