Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 December 04

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Alexander Maltsev
Есть два селекта, в каждом одни и те же 30 столбцов, но в разном порядке. Можно как-то сделать им юнион без промежуточного селекта с перечислением тех же столбцов в правильном порядке?
Перечислить придется, причем несколько раз
источник

AM

Alexander Maltsev in SqlCom.ru - Стиль жизни SQL
Ilia Zviagin
Перечислить придется, причем несколько раз
Ну я уже чисто теоретически интересуюсь, потому что сделал перечислением. Обошелся одним кстати.
источник

AM

Alexander Maltsev in SqlCom.ru - Стиль жизни SQL
Alexander Maltsev
Есть два селекта, в каждом одни и те же 30 столбцов, но в разном порядке. Можно как-то сделать им юнион без промежуточного селекта с перечислением тех же столбцов в правильном порядке?
Насколько я знаю, такого способа нет. Даже с промежуточной таблицей insert into, потребовал правильного порядка столбцов. Но я подумал, что одна голова хорошо, а 2000 лучше, и спросил у коммьюнити.
источник

O

Oksana in SqlCom.ru - Стиль жизни SQL
подскажите пожалуйста)
у меня есть три значения name1,name2,name3 - вывожу три столбца
как прописать условие так, чтобы если name2 - null, то возвращается name1
если name3 - null, о возвращается name2 (но при этом если name2 тоже null, в таком
случае case ниже возвращает name2 как null, а как сделать так чтобы в таком случае вместо name3 выводило name1)

select name1 as n1,
case  when name2 is not null then name2  else name1 end as n2,
case  when name3 is not null then name3  else name2 end as n3
источник

АА

Андрей Агеев... in SqlCom.ru - Стиль жизни SQL
Oksana
подскажите пожалуйста)
у меня есть три значения name1,name2,name3 - вывожу три столбца
как прописать условие так, чтобы если name2 - null, то возвращается name1
если name3 - null, о возвращается name2 (но при этом если name2 тоже null, в таком
случае case ниже возвращает name2 как null, а как сделать так чтобы в таком случае вместо name3 выводило name1)

select name1 as n1,
case  when name2 is not null then name2  else name1 end as n2,
case  when name3 is not null then name3  else name2 end as n3
посмотрите coalesce(n1,n2,n3)
источник

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Oksana
подскажите пожалуйста)
у меня есть три значения name1,name2,name3 - вывожу три столбца
как прописать условие так, чтобы если name2 - null, то возвращается name1
если name3 - null, о возвращается name2 (но при этом если name2 тоже null, в таком
случае case ниже возвращает name2 как null, а как сделать так чтобы в таком случае вместо name3 выводило name1)

select name1 as n1,
case  when name2 is not null then name2  else name1 end as n2,
case  when name3 is not null then name3  else name2 end as n3
или Case-expression
источник

AK

Andy Korg in SqlCom.ru - Стиль жизни SQL
Alexander Maltsev
Есть два селекта, в каждом одни и те же 30 столбцов, но в разном порядке. Можно как-то сделать им юнион без промежуточного селекта с перечислением тех же столбцов в правильном порядке?
только динамический запрос, со всеми его недостатками :)
источник

SN

Slavano Nikon in SqlCom.ru - Стиль жизни SQL
Нужен совет, есть торговая система в в которой доступ к данныи из приложения построен на вьюшках( вьюшки соединяют до 5-10 таблиц+ другие вьюшки+ поля с функциями) понятно дело одним селектом, соответсвенно планы неоптимальные либо оптимизатор отваливается по таймаутут и выдает планы неоптимальные.  Используются вьюшки , т.к в интерфесах полно фильтров . соответснно добавив фильтп пользователем, этот фильтр накладывается на вьюку делается запрос к базе.  Пытаюсь оптимизировать, все это делается через временные таблицы, соединения упрощаю на несколько , чтобы за раз не соединять все таблицы и т.д, эффект есть, запросы лучше отрабатывают, планы гууд, но как сделать  так чтобы функционал приложения остался прежним, чтобы пользователь мог делать фильтры? Я не помню, как то во вюшках можно использовать процедуры и т.д?
источник

SN

Slavano Nikon in SqlCom.ru - Стиль жизни SQL
или что посоветуете?
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Во вью не вызвать процедуру
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Максимум функции кажется можно
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Join/apply к функции
источник

SN

Slavano Nikon in SqlCom.ru - Стиль жизни SQL
Ну вот я про тоже,а как сделать тот же функционал с процедурами? Во вью модно использовать временные таблицы и т.д?тоже вроде нет
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Пользователь как вызывает вьюхи сейчас? Через что?
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Если пользователь может вызывать процедуры и условие фильтрации может быть вообще любым, то в процедуре должны быть все варианты входящих параметров, а там уже динамический   sql, но это такое себе решение
источник

SN

Slavano Nikon in SqlCom.ru - Стиль жизни SQL
У пользователя форма, к примеру чеков, форма чеков это вью соединения многих таблиц(, контрагенты, заказы и ТД) они на форме делают к примеру фильтр, чеки от до , либо фильтры , приложение добавляет эти фильтры к вью, делается запрос к базе
источник

SN

Slavano Nikon in SqlCom.ru - Стиль жизни SQL
Там фильтров, чуть ли не на каждый столбец
источник

Y

Yuriy T in SqlCom.ru - Стиль жизни SQL
Посмотри тогда возможно на функции в них табличные переменные можно делать, хотя в твоём случае наверное это тоже не подойдет
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Slavano Nikon
У пользователя форма, к примеру чеков, форма чеков это вью соединения многих таблиц(, контрагенты, заказы и ТД) они на форме делают к примеру фильтр, чеки от до , либо фильтры , приложение добавляет эти фильтры к вью, делается запрос к базе
Типичная проблема динамического поиска. Нужно добавлять рекомпиляцию в выражения, которые часто тупят. OPTION(RECOMPILE). Работу формы лучше переделать на процедуры - пусть они и опираются на те же вьюхи, но гибкости это прибавит существенно. Ну и стоит попробовать QueryStore - эта технология позволяет отслеживать регрессию планов выполнения и указывать, например, какой из известных планов стоит использовать. С 2017 версии есть вплоть до автоматической коррекции планов.
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Вот статья академического качества по данной проблематике. Не смотрите, что это про 2008, фундаментально мало что поменялось, чудес не бывает. http://www.sommarskog.se/dyn-search-2008.html
источник