Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
kadawrik Member Откуда: Сообщений: 25 |
Я не спец по MS SQL, поэтому обращаюсь за помощью к знатокам сего дела. Помогите, пожалуйста, составить запрос на языке T-SQL. Суть в следующем: Имеем БД (на MS SQL Server 2008) - NAV5 (база данных Навижн 5.01) База содержит данные от более чем 10 различных фирм (назовем их Фирма1, Фирма 2 и т.д.) Таблицы, относящиеся к определенной фирме, имеют соответственно имена: [Фирма1$G_L_Entry], [Фирма2$G_L_Entry] и т.д. Имеется также общая для всех таблица [Company], соодержащая список всех фирм. Нужно составить SELECT, который бы показал проводки из таблиц G_L_Entry за определенный период и по выбранным фирмам (к примеру, меня интересуют только фирмы: Фирма1, Фирма2, ФирмаN) Можно, конечно, написать 3 Селекта и объединить их через UNION ALL. Но хотелось бы как-то по-элегантнее решить задачу. К тому же набор фирм, по которым выбираются проводки может меняться (в идеале было бы неплохо это передавать через параметр) |
13 окт 15, 12:47 [18272065] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 21053 |
Делать надо эффективно, а не элегантно. А эффективнее частных запросов и их объединения трудно что-то не то что придумать - даже представить. |
||
13 окт 15, 13:11 [18272216] Ответить | Цитировать Сообщить модератору |
_djХомяГ
Guest |
"Отчет" будет запускаться из Navision'a (там свой синтаксис обращения к T-SQL),SSMS, Reporting Service, какого то другого клиента? В связи с этим каким образом будете передавать параметры (список фирм, даты и тд и тп -ведь в каждом клиенте своя специфика) |
13 окт 15, 13:24 [18272332] Ответить | Цитировать Сообщить модератору |
kadawrik Member Откуда: Сообщений: 25 |
Akina, вы, наверное, правы. Но я - лентяйка и копипастить селекты, когда нужно выбрать данные от других фирм, было как-то лень. Но если нет чего-то более универсального, то придется оставить этот вариант. Тогда такой вопрос: есть ли в SQL функция, которая возвращает префикс имени таблицы (речь идет о части имени, стоящей до знака $)? |
13 окт 15, 13:31 [18272401] Ответить | Цитировать Сообщить модератору |
sandman_sql Member Откуда: Сообщений: 1 |
create table t(name varchar(max)) insert into t values('Фирма1$G_L_Entry') insert into t values('Фирма100$G_L_Entry') insert into t values('Фирма1000$G_L_Entry') select name,SUBSTRING(name,1,charindex('$',name)-1) from t |
13 окт 15, 13:44 [18272499] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 21053 |
SUBSTRING(), LEFT() CHARINDEX(), PATINDEX() |
||
13 окт 15, 13:44 [18272503] Ответить | Цитировать Сообщить модератору |
kadawrik Member Откуда: Сообщений: 25 |
_djХомяГ, отчет будет запускаться НЕ из Навижн, а из другого клиента (Dell Boomi Atomsphere) Как будут передаваться параметры щас не столь важно. Мне достаточно будет для начала хотя бы простую конструкцию типа: DECLARE @myParameter VARCHAR(30) = 'Список,Фирм,Чеез,Запятую' и далее в запросе , н-р, так: SELECT [Name] FROM [NAV5SQL].[dbo].[Company] Where Name IN @myParameter (данная конструкция синтаксически, разумеется, неверная, но смысл, думаю, понятен) |
13 окт 15, 13:50 [18272550] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
kadawrik, тогды вам в FAQ , там сопособов 5 расписанно как передать массив или список в сиквеле |
13 окт 15, 13:56 [18272588] Ответить | Цитировать Сообщить модератору |
soljo_ua Member Откуда: Киев Сообщений: 369 |
kadawrik, создайте процедуру и передавайте параметрами туда что Вам нужно, а в самой процедуре делайте динамику и бегайте по всем нужным компаниям и скорее всего Вам нужна выборка по каким то определенным счетам, а не все что пишется в G_L_Entry. Опять таки если Вас интересуют данные за прошедшие периоды можете каждую ночь сливать данные куда нибудь в архивную таблицу в которой будут данные по всем компаниям и нужен будет один запрос - все зависит от задачи |
13 окт 15, 14:25 [18272769] Ответить | Цитировать Сообщить модератору |
kadawrik Member Откуда: Сообщений: 25 |
Ребят, спасибо всем. кто откликнулся. Будем пробовать разные варианты. |
13 окт 15, 14:39 [18272843] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
kadawrik, Сделайте VIEW на [Фирма1$G_L_Entry] UNION ALL [Фирма2$G_L_Entry] ... С захаркоденым полем 'Фирма1' AS Фирма ... 'Фирма2' AS Фирма ... И потом пишите запросы к этому VIEW с фильтром по полю Фирма. Можно конечно пойти еще дальше и навесить триггер на [Company], чтобы если добавляется/удаляется компания, то VIEW автоматически пересоздается. |
14 окт 15, 22:55 [18280371] Ответить | Цитировать Сообщить модератору |
Serg_77m Member Откуда: Донецк Сообщений: 237 |
|
||
15 окт 15, 09:08 [18281053] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |