powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вьюшка с параметрами
34 сообщений из 34, показаны все 2 страниц
Вьюшка с параметрами
    #39744332
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть задача показать две таблицы.
В первой - Перечень организаций клиентов с общей суммой закупок за весь период.
Для нее была создана вьюшка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER VIEW V_SUMCSTM(
    ID,
    V_CSTM_NAME,
    V_SUM)
AS
SELECT CSTM.ID,
            CSTM.SHRTNAME,
            COALESCE(sum(SCCNT.V_SUM), 0)
                                                                            
FROM CUSTOMERS CSTM, V_SUMCCNT SCCNT

WHERE SCCNT.ID_CSTM = CSTM.ID

GROUP BY
       CSTM.ID,
       CSTM.SHRTNAME
;


Во второй - Непосредственно контакты организаций с общей суммой закупок за весь период.
И для нее была создана вьюшка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR ALTER VIEW V_SUMCCNT(
    ID,
    ID_CSTM,
    V_CCNT_NAME,
    V_SUM)
AS
SELECT CCNT.ID,
       CCNT.ID_CUSTOMER,
       CCNT.V_CONTACTNAME,
       COALESCE((select sum(V_SUM) from V_ORDER where ID_CUSTCONTACT = CCNT.ID and V_RECORDSTATUS in (4)), 0)

FROM V_CUSTCONTACT CCNT
;


CUSTOMERS - Таблица организаций клиентов
V_CUSTCONTACT - Таблица контактов организаций клиентов
V_ORDER - Таблица заказов

В таком виде все работает. Но встала задача организовать вывод данных по интервалу даты продаж. Поле с датой продажи находится в таблице V_ORDER.

Подскажите, как это можно реализовать? Т.к. вьюшки зависимые, кроме того, как пересоздавать на сервере новые вьюшки с выбором диапазона даты продаж и удалять старые, ничего пока в голову не приходит.

Спасибо.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744337
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

вьюху можно связать с таблицей. Не проблема. Но лучше, наверно, сделать другую вьюху под новые требования. У Вас всё на вьюхах построено?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744340
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,
А что "всё", простите? Есть и таблицы с данными и вьюхи, консолидирующие их.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744344
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

Данный отчет необходимо организовать из данных таблицы V_ORDER. Может как-нить по другому можно это решить?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744346
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал сделать так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER VIEW V_SUMCSTM(
    ID,
    V_CSTM_NAME,
    V_SUM)
AS
SELECT CSTM.ID,
       CSTM.SHRTNAME,
       COALESCE(sum((select sum(V_PROFIT) from V_ORDER where ID_CUSTCONTACT = CCNT.ID and V_RECORDSTATUS in (4))), 0)
                                                                            
FROM CUSTOMERS CSTM, V_ORDER ORD

WHERE ORD.ID_CUSTOMER = CSTM.ID

GROUP BY
       CSTM.ID,
       CSTM.SHRTNAME
;


Но ошибка упирается в переборку контактов клиента (ID_CUSTCONTACT = CCNT.ID).
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744348
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
внутри вьюх параметры не живут.

зы: но их можно пристегнуть снаружи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744354
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да он же там в них уже сгруппировал данные без учета дат, как понимаю. Т.е. Даты уже
сделали ему ручкой и применить те вьюхи к новой постановке уже не получится.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744371
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroranкак это можно реализовать?

1. Выкинуть вьюхи.
2. Написать запрос.
3. Избавиться от аксессовских привычек (опционально).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744375
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,
На начальном этапе - да. Вьюхи без условия на дату. Но это легко исправляется
Код: sql
1.
COALESCE((select sum(V_SUM) from V_ORDER where ID_CUSTCONTACT = CCNT.ID and V_RECORDSTATUS in (4) AND V_SALEDATE >= '01.12.2018'), 0)


Но это внизу. Как сверху диапазон спустить?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744379
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для любителей прыжков в ширину:

делаем gtt табличку с полями id_connection, dt1, dt2
в триггере на инсерт оной таблички заполняем коннект current_connect -ом
ну и пару дат пишем, вестимо.

далее джойн с этой табличкой по каррент_коннекту вполне протолкнет во вьюху искомые параметры.

Вот только непонятно, зачем это городить для отчета, обычный запрос с параметрами и вуаля.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744384
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyделаем gtt табличку с полями id_connectionЗачем в GTT это поле ?



Hadroran,

не нужно насиловать инструмент (view), нужно научиться его правильно выбирать и применять.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744389
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

а чем банальный запрос по V_Order с group by не подходит? Я просто думаю - в чём причина использования вьюхи. Может это принципиально?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744391
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Допустим...
1. Выкинули.
2. В датасет SUMCCNT мы переписываем запрос из соответствующей вьюхи с добавлением диапазона дат. В ответе получаем список всех контактов с суммами продаж. Кто был неактивен, тому дарим "нолик". А как сформировать запрос в датасет SUMCSTM, чтобы получить сумму на всю организацию по всем активным контактам?

3. А в чём эта хрень вылезла?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744394
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЗачем в GTTда, в гтт необязательно, "масло-масляное". можнотлибо стационарную табличку с коннектом, либо гтт.
KreatorXXIЯ просто думаю - в чём причина использования вьюхи.Есть места, где это удобно. Причем удобно, чтобы параметры хранились отдельно, например, с привязкой к логину юзера.
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744400
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, вьюхи не обязательны. Тему так обозвал, что для решения этого не хватало. Знаю, что так не бывает. Забудем про вьюхи... Просто в голове что-то не туда повернулось. Может про сиськи думаю.... Нет не про них. Про запросы.
"банальный запрос по V_Order с group by" подойдет. Но я не понимаю как потом разбить его данные на две части?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744403
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

Походу вам надо приглашать программиста. В штат.))
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744404
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,

Ты думаешь он про сиськи думать не будет?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744406
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HadroranА как сформировать запрос в датасет SUMCSTM, чтобы получить сумму на всю организацию по
всем активным контактам?

1. Изучить SQL. В особенности внимательно - раздел "агрегатные функции".
2. Изучить используемый инструмент. В особенности внимательно - возможности агрегирования
"на лету".

Hadroran3. А в чём эта хрень вылезла?
В использовании view там, где весь остальной мир использует просто запросы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744409
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Без полного приведения метаданных и повторной аккуратной формулировки поставленной
задачи тебе, имхо, никто не поможет. И даже с ними, не факт что кто то захочет разбираться,
хотя и не исключено. Все таки этот форум немного не про SQL алгоритмы, а про особенности
Firebird (прошу без обид).
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744410
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кароче ясно... пашел учить...
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744411
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HadroranVlad F,

Ты думаешь он про сиськи думать не будет?
Редкий программист про них не думает, но мне, напрример, это совершенно не мешает.))
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744412
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HadroranРебята, вьюхи не обязательны. Тему так обозвал, что для решения этого не хватало. Знаю, что так не бывает. Забудем про вьюхи... Просто в голове что-то не туда повернулось. Может про сиськи думаю.... Нет не про них. Про запросы.
"банальный запрос по V_Order с group by" подойдет. Но я не понимаю как потом разбить его данные на две части?
А какие две части? Давай с нуля. Что нужно получить?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744419
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

есть несколько вариантов

1. Использовать вместо вьюх запросы
2. В некоторых случаях можно написать вьюху так чтобы к ней можно было делать внешний запрос с параметрами
3. Использовать селективные хранимые процедуры с параметрами
4. Если параметры глобальные для сессии можно внутри вьюхи использовать контекстные переменные
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис4. Если параметры глобальные для сессии можно внутри вьюхи использовать контекстные переменные

Не учи люде плохому. Нубы всегда хватаются за этот вариант и поток говнокода потом уже не
остановить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744425
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

про запросы. Если мозг всё ещё думает в терминах SELECT FROM VIEW JOIN VIEW JOIN TABLE, то попробуй изучить CTE. Каждая CTEшка почти тоже самое что вьюха, только не храниться в метаданных. Но правда общий запрос может быть большим
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744426
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

Нужно получить две таблицы.
1. С суммой заказов по каждой организации
2. С суммой заказов по каждому контакту организации
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744428
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

при правильном и аккуратном применении будет работать нормально
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744430
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HadroranНужно получить две таблицы.
1. С суммой заказов по каждой организации
2. С суммой заказов по каждому контакту организации

Это два разных запроса. См выше п.2 про изучение своего инструмента.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744478
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

если у них не бывает одного контакта на несколько организаций (смотря что они имеют в виду под контактом, может быть и так), то 1-й - всего лишь агрегат 2-го

более того, они просто напрашиваются в одну таблицу

Иванов Вася - 10
Иванова Маша - 20
Иванов Петя - 30
Семья Ивановых - 60
Петров Ваня - 10
и.т.д.

....а соседней колонкой можно ещё и накапливающуюся сумму пустить оконными функциями

некоторые вообще HTML-текст в SELECT'ах формируют
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39744505
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochболее того, они просто напрашиваются в одну таблицу

Я даже больше скажу: они с лёгкостью ложатся в одну таблицу и таки да, первый запрос не
нужен. В отличии от программиста.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39745319
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HadroranKreatorXXI,

Нужно получить две таблицы.
1. С суммой заказов по каждой организации
2. С суммой заказов по каждому контакту организации

Первый может быть таким:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT CSTM.ID,
       CSTM.SHRTNAME,
       sum(ord.V_PROFIT)
                                                                            
FROM CUSTOMERS CSTM
         inner join V_ORDER ORD on ORD.ID_CUSTOMER = CSTM.ID

WHERE ord.datetime between '???' and '???'

GROUP BY 1, 2


Второй пока непонятен. Как v_order связан с контактом организации?
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39745439
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

Спасибо, друг. То что надо.
Правда когда перешел на запрос он выполнялся очень долго. Просмотрел план и увидел, что запрос ходит по таблицам т.к. таблица V_ORDER не содержала ключ таблицы CUSTOMERS, а ходила за этими данными через другую таблицу. Исправил и тут ты ответил. С этим запросом этот ключ не нужен.

А второе сверху делается легче уже в датасете
Код: sql
1.
2.
3.
4.
SELECT * 
FROM V_SUMCCNT
WHERE ID_CSTM = :ID  
ORDER BY V_SUM DESC
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39745444
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hadroran,

V_SUMCCNT это вьюха? Договорились же их убрать!
...
Рейтинг: 0 / 0
Вьюшка с параметрами
    #39745892
Hadroran
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,

Блн, ну одну то дай оставить... Она не мешает, даже наоборот :)
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вьюшка с параметрами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]