Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21053
kadawrik
Можно, конечно, написать 3 Селекта и объединить их через UNION ALL.
Но хотелось бы как-то по-элегантнее решить задачу.

Делать надо эффективно, а не элегантно. А эффективнее частных запросов и их объединения трудно что-то не то что придумать - даже представить.
13 окт 15, 13:11    [18272216]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
_djХомяГ
Guest
"Отчет" будет запускаться из Navision'a (там свой синтаксис обращения к T-SQL),SSMS, Reporting Service, какого то другого клиента? В связи с этим каким образом будете передавать параметры (список фирм, даты и тд и тп -ведь в каждом клиенте своя специфика)
13 окт 15, 13:24    [18272332]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Akina, вы, наверное, правы. Но я - лентяйка и копипастить селекты, когда нужно выбрать данные от других фирм, было как-то лень.
Но если нет чего-то более универсального, то придется оставить этот вариант.

Тогда такой вопрос: есть ли в SQL функция, которая возвращает префикс имени таблицы (речь идет о части имени, стоящей до знака $)?
13 окт 15, 13:31    [18272401]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21053
kadawrik
есть ли в SQL функция, которая возвращает префикс имени таблицы (речь идет о части имени, стоящей до знака $)?

SUBSTRING(), LEFT()
CHARINDEX(),
PATINDEX()
13 окт 15, 13:44    [18272503]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
kadawrik,

тогды вам в FAQ , там сопособов 5 расписанно как передать массив или список в сиквеле
13 окт 15, 13:56    [18272588]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
kadawrik,

создайте процедуру и передавайте параметрами туда что Вам нужно, а в самой процедуре делайте динамику и бегайте по всем нужным компаниям и скорее всего Вам нужна выборка по каким то определенным счетам, а не все что пишется в G_L_Entry.
Опять таки если Вас интересуют данные за прошедшие периоды можете каждую ночь сливать данные куда нибудь в архивную таблицу в которой будут данные по всем компаниям и нужен будет один запрос - все зависит от задачи
13 окт 15, 14:25    [18272769]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
kadawrik
Member

Откуда:
Сообщений: 25
Ребят, спасибо всем. кто откликнулся. Будем пробовать разные варианты.
13 окт 15, 14:39    [18272843]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить запрос (данные от разных фирм в одном Select'е)  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
kadawrik
Имеем БД (на MS SQL Server 2008) - NAV5 (база данных Навижн 5.01)
База содержит данные от более чем 10 различных фирм (назовем их Фирма1, Фирма 2 и т.д.)
Таблицы, относящиеся к определенной фирме, имеют соответственно имена: [Фирма1$G_L_Entry], [Фирма2$G_L_Entry] и т.д. Имеется также общая для всех таблица [Company], соодержащая список всех фирм. <...>
Можно, конечно, написать 3 Селекта и объединить их через UNION ALL.
Но хотелось бы как-то по-элегантнее решить задачу. К тому же набор фирм, по которым выбираются проводки может меняться (в идеале было бы неплохо это передавать через параметр)
Поэлегантнее - это переместить данные всех фирм в одну общую таблицу, в которое добавить поле - код фирмы со ссылкой на [Company]. Тогда и с фильтром проблем не будет. Вот только для этого понадобится или ковырять приложение, или создавать представления для совместимости... наверное, даже с триггерами.
15 окт 15, 09:08    [18281053]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить