Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
PerfGuy Member Откуда: Сообщений: 19 |
Всем привет, Подскажите пожалуйста сможете ли посоветовать как оптимизировать ряд повторяющихся подзапросов в которых изменяется только один из ключей поиска(в примере ниже alias): ......... select string_value from stock_vars var1 where task.stock_id = var1.stock_id and var1.alias = 'stockitId' ) as STOCKID ,( select string_value from stock_vars var1 where task.stock_id = var1.stock_id and var1.alias = 'stocktNumber' ) as STOCKNUMBER ,( select string_value from stock_vars var1 where task.stock_id = var1.stock_id and var1.alias = 'stockTitle' ) as STOCKTTITLE ,( ....... вложенных запросов может быть очень много. |
6 июн 14, 17:20 [16134244] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
CASE или PIVOT |
6 июн 14, 17:21 [16134257] Ответить | Цитировать Сообщить модератору |
PerfGuy Member Откуда: Сообщений: 19 |
Glory cпасибо за совет. А не могли бы вы пример добавить, чтобы понять как имплементировать?. |
||
6 июн 14, 17:54 [16134480] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Вот индус специально для вас старался http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/ |
6 июн 14, 18:08 [16134542] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
a_voronin, Уйня там всё, надо чтобы человек понял. А там для тех кто понимает и применяет новые фишечки новой версии скуля. PIVOT вообще вредно показывать молодым, они думают что это элемент языка, а не всего-лишь надстройка над ним, которая сама пишет CASE, притом довольно неудобно. |
6 июн 14, 21:21 [16135372] Ответить | Цитировать Сообщить модератору |
PerfGuy Member Откуда: Сообщений: 19 |
Mnior Вы бы не могли набросать небольшой пример, с использованием CASE? |
||
12 июн 14, 13:26 [16158592] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вместо каждого вашего подзапроса пишите CASE с проверкой alias |
||
12 июн 14, 13:30 [16158608] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
;WITH [dbo.vwStockVars] AS ( -- Сразу VIEW сделать и не парится потом SELECT S.stock_id -- alias строковый - это изврат, там должен быть его ID, а названия хранятся в справочнике. Про 3ю нормальную форму слышал? -- string_value - Про SQL_Variant не слышал? , Max(CASE WHEN S.alias = 'stockitId' THEN S.string_value END) AS stockitId , Max(CASE WHEN S.alias = 'stocktNumber' THEN S.string_value END) AS stocktNumber , Max(CASE WHEN S.alias = 'stockTitle' THEN S.string_value END) AS stockTitle FROM dbo.Stock_Vars S -- CamelCase вааще-то стандарт: stock_vars -> StockVars, string_value -> StringValue GROUP BY S.stock_id ) SELECT * FROM dbo.Task T LEFT JOIN [dbo.vwStockVars] V ON V.stock_id = T.stock_id |
12 июн 14, 20:59 [16159597] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |