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

Откуда:
Сообщений: 190
Можно ли каким то образом объявить строковую переменную в тексте запроса Query SQL , чтобы затем подставлять в тексте.
У меня запрос, где одни и те же фразы встречаются по нескольку раз. Запрос сложный, хотелось бы его сократить по тексту. Например, приведу просто приметивно, что мне нужно.
select LEFT(Gost, 4), kod, pri
from Table
Group by LEFT(Gost, 4), kod
Текст LEFT(Gost, 4) хотелось бы заменить переменной и подставлять.
Наверное, нельзя. никогда об этом не слышала. но, все-таки...
23 май 17, 22:36    [20505907]     Ответить | Цитировать Сообщить модератору
 Re: Повторяющиеся строки в тексте кода запроса  [new]
правильный проходящий.
Guest
laifik,
нельзя и не нужно.
Примерно так:
select t.a, kod, pri
from Table
cross apply (select LEFT(Gost, 4) as a) t
Group by t.a, kod
23 май 17, 22:44    [20505934]     Ответить | Цитировать Сообщить модератору
 Re: Повторяющиеся строки в тексте кода запроса  [new]
laifik
Member

Откуда:
Сообщений: 190
Жаль, но это немного не то. Я понимаю, что эту задачу можно решить с помощью функции Format в Builder, но в данном случае мне это не подходит. Спасибо за ответ, я так и предполагала.
24 май 17, 09:55    [20506597]     Ответить | Цитировать Сообщить модератору
 Re: Повторяющиеся строки в тексте кода запроса  [new]
vladislav109
Member

Откуда:
Сообщений: 69
laifik,
DECLARE @sql NVARCHAR(4000), @gost NVARCHAR(100);
SET @gost = 'LEFT(Gost, 4)';
SET @sql = 'SELECT ' + @gost + ', kod, pri FROM Table GROUP BY ' + @gost + ', kod;';
EXEC(@sql);

Выглядит колхозно конечно же, но работать должно
24 май 17, 16:09    [20508513]     Ответить | Цитировать Сообщить модератору
 Re: Повторяющиеся строки в тексте кода запроса  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
laifik
Запрос сложный, хотелось бы его сократить по тексту.
делите код на части с помощью #table и with cte (и вам хорошо и оптимизатору)
insert #t ...
select LEFT(Gost, 4) as g, kod, pri from Table

select ... from #t group by g, kod

--=======================

with c
as
(select LEFT(Gost, 4) as g, kod, pri from Table)

select ... from c group by g, kod
24 май 17, 16:17    [20508556]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить