Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой / 25 сообщений из 36, страница 1 из 2
14.05.2015, 17:35
    #38959030
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Есть 2 связанные таблицы:
"Случаи" - LIST_CASES(Case_ID Integer, RF_ID integer, PHYS_ID varchar(22), CODE_SPEC varchar(10), TARGET integer),
"Услуги" - LIST_USL(USL_ID Integer, Case_ID Integer, RF_ID integer, PHYS_ID varchar(22), CODE_SPEC varchar(10), K_USL integer, CODE_USL varchar(20)).
Уточнения: RF_ID - идентификатор вышестоящей мастер-талблицы, во входных параметрах известен нужный диапазон значений; K_USL - для всех услуг =1, так что count(*)=sum(k_usl).

Что нужно: написать хранимую процедуру, в которой для каждого уникального сочетания PHYS_ID и CODE_SPEC будет подсчитано количество случаев и услуг для различных диапазонов TARGET, и для некоторых вариантов TARGET нужно считать количество услуг по разным диапазонам CODE_USL; при чем значения для каждого диапозон TARGET должены быть в отдельном столбце(этот момент решила реализовать через использование 2-х ХП, в одной считаю по каждому диапазону целей отдельно, в другой группирую и суммирую).
Главная проблема в том, что не хочется дважды обращаться к таблице случаев.

FireBird 2.5

Подскажите, пожалуйста, как оптимальнее решить эту задачу. Или может где-то подобная проблема уже описана?
...
Рейтинг: 0 / 0
14.05.2015, 17:37
    #38959032
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
студенты потянулись,сезон...
...
Рейтинг: 0 / 0
14.05.2015, 17:39
    #38959036
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Hello, Анна Карасикова!
You wrote on 14 мая 2015 г. 17:39:41:

Анна Карасикова> Что нужно: написать хранимую процедуру
в чем печаль твоих обид? (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 17:40
    #38959038
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Gallemar, мой вопрос не относиться к учёбе, совсем.
...
Рейтинг: 0 / 0
14.05.2015, 17:42
    #38959043
zirra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова> Gallemar, мой вопрос не относиться к учёбе, совсем.
...и кто ж тебя, убогую, на работу-то взял?.. :-(

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 17:42
    #38959045
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Мимопроходящий. Извините за неправильно сформулированный вопрос.
Будет лучше если сформулипровать так: "как правильно и оптимально написать ХП для ..."?
...
Рейтинг: 0 / 0
14.05.2015, 17:43
    #38959047
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасиковамой вопрос не относиться к учёбе, совсем.
Тогда из него следует как минимум исключить условие "одним запросом". Ну а потом RTFM CASE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 17:44
    #38959052
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Hello, Анна Карасикова!
You wrote on 14 мая 2015 г. 17:45:15:

Анна Карасикова> "как правильно и оптимально написать ХП для ..."?
пиши неоптимально, мы поправим.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 17:44
    #38959053
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Я думала здесь конкретные решения подскажут, а не будут оскорбления писать...
...
Рейтинг: 0 / 0
14.05.2015, 17:46
    #38959061
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова,

ну и как вы думали, что вам подскажут конкретные решения для ВАШЕЙ конкретной задачи?
Тут подсказывают разве что если "у меня вот так не получается". А у вас вроде бы вообще пока никак не получается.
...
Рейтинг: 0 / 0
14.05.2015, 17:47
    #38959064
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова,

Вот придет Таблоид - он напишет. С деревом и рекурсией ;)
...
Рейтинг: 0 / 0
14.05.2015, 17:48
    #38959066
zirra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова> Я думала здесь конкретные решения подскажут, а не будут оскорбления писать...
Поскажут!.. Только с фоткой topless!..

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 18:02
    #38959082
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Мой вариант для случая без разделения по кодам услуг:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
for select tu.phys_id, tu.code_spec, z(sum(tu.k_uslf)) as k_uslf
   from list_usl tu
   where tu.rf_case_id in (select tc.list_cases_id from list_cases tc where tc.target in (1,2,3,4,5,20)and tc.q_u=2
                           and (:r_str like '%,'||trim(cast(tc.rf_reestr_id as varchar(20)))||',%') )
   group by 1,2
  into :vr_fio, :vr_spec, :pos  do
  begin
    select z(count(*)) from list_cases tc
     where (:r_str like '%,'||trim(cast(tc.rf_reestr_id as varchar(20)))||',%')
      and tc.q_u=2 and tc.target in (1,2,3,4,5,20) and tc.phys_id=:vr_fio and tc.code_spec=:vr_spec
    into :kol;
    suspend;
  end
...
Рейтинг: 0 / 0
14.05.2015, 18:07
    #38959089
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
В основном меня интересует, как в одном запросе посчитать количество записей в мастер-таблице и детейл-таблице с группировкой по N-ому количеству полей мастера без двойного обращения к мастер-таблице. Или такое в принципе не возможно?
...
Рейтинг: 0 / 0
14.05.2015, 18:10
    #38959095
zirra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова> В основном меня интересует, как в одном запросе посчитать количество записей в мастер-таблице и детейл-таблице с группировкой по N-ому количеству полей мастера без двойного обращения к мастер-таблице.
> Или такое в принципе не возможно?
/ смотрим, девушка сурьёзная... topless не прокатит /
Наводящий вопрос: а занафига такое вообще понадобилось в запросе-то?.. Пришло на клиента - там и зри!..

--
Vladimir A.Bakhvaloff
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 18:10
    #38959096
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Hello, Анна Карасикова!

> from list_usl tu
> where tu.rf_case_id in (select...

замени на

from list_usl tu
join list_cases tc on tu.rf_case_id = tc.list_cases_id
where tc.target in (...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 18:14
    #38959098
Поручик ·· Ржевский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна КарасиковаВ основном меня интересует, как в одном запросе посчитать количество записей в мастер-таблице и детейл-таблице с группировкой по N-ому количеству полей мастера без двойного обращения к мастер-таблице. Или такое в принципе не возможно?это делается кейсом (CASE) 17641256

например:

COUNT(CASE WHEN Table1.Field1=1 AND Table2.Field2=2 THEN 1 END)
...
Рейтинг: 0 / 0
14.05.2015, 18:23
    #38959111
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
zirra
Наводящий вопрос: а занафига такое вообще понадобилось в запросе-то?.. Пришло на клиента - там и зри!..

--
Vladimir A.Bakhvaloff

под запросом я имела ввиду выборку данных в хранимой процедуре, типа "for select "
Такого рода расчеты периодически требуются в отчетах различных проектов.
...
Рейтинг: 0 / 0
14.05.2015, 18:29
    #38959118
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
МимопроходящийHello, Анна Карасикова!

> from list_usl tu
> where tu.rf_case_id in (select...

замени на

from list_usl tu
join list_cases tc on tu.rf_case_id = tc.list_cases_id
where tc.target in (...


Вариант с JOIN сравнивала с мои, он работает чуточку медленнее, чем мой, на несколько миллисекунд.
...
Рейтинг: 0 / 0
14.05.2015, 18:39
    #38959127
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасикова,

что за функция Z?
...
Рейтинг: 0 / 0
14.05.2015, 18:44
    #38959130
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна КарасиковаВ основном меня интересует, как в одном запросе посчитать количество
записей в мастер-таблице и детейл-таблице с группировкой по N-ому количеству полей мастера
без двойного обращения к мастер-таблице. Или такое в принципе не возможно?
Возможно. RTFM COUNT(DISTINCT).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 18:44
    #38959131
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Поручик ·· Ржевский , получается без двойного обращения к мастеру всё таки не обойтись? Или я уже совсем туплю, потому что никак не могу понять как условная выборка значения поможет в расчете количества строк для мастера и детэйла одновременно.
...
Рейтинг: 0 / 0
14.05.2015, 18:45
    #38959133
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Симонов Денисчто за функция Z?

Скорее всего из rfunc.
Эквивалентна
Код: sql
1.
coalesce(:param, 0e0)

возвращает DOUBLE PRECISION
...
Рейтинг: 0 / 0
14.05.2015, 18:48
    #38959136
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Анна Карасиковаполучается без двойного обращения к мастеру всё таки не обойтись?
Сначала расскажите зачем Вы обращаетесь к нему дважды и чем Вас не устроил простой
Код: sql
1.
2.
select ..., count(distinct master.id), count(*) from master join detail on ...
group by ....


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.05.2015, 18:49
    #38959139
Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой
Шавлюк Евгений.
Функция "Z" из библиотеки rfunc, она возвращает либо значение входного параметра(число), либо 0, если входной параметр = Null.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как в одном запросе посчитать количество строк для мастера и детэйла с группировкой / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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