powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / два запроса к одной таблице сделать в один запрос
26 сообщений из 26, показаны все 2 страниц
два запроса к одной таблице сделать в один запрос
    #39747765
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

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


Мне нужно разделить в запросе на оперированных и нет.
...параметры выборки.... - это дата выписки, отделение и т.д.

SELECT s.family||' '||s.name||' '||s.father AS FIO
FROM spisok s
WHERE ...параметры выборки.... and s.KEY_SPISOK IN
(SELECT KEY_SPISOK_OPERAT FROM OPERAT
WHERE KEY_SPISOK_OPERAT IN (SELECT sss.KEY_SPISOK FROM
SPISOK sss where ...параметры выборки....

мне нужно в одном запросе сделать, чтобы было

Оперированные не оперированные
фио1 фио2



Как можно это сделать лучше?
Дело в том, что их кол-во разное, я пробовал через два запроса, получается,
что сначала выводится один, а в фио2 нул, а затем наоборот (надо без нул в начале).

Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747770
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

версия Firebird?
Кстати по моему ты с подобным вопросом недавно обращался
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747771
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

2.5
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747790
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

тогда пиши анонимный блок или процедуру. Запросом эффективно в 2.5 работать не будет.

З.Ы. Ещё надо подумать над тем стоит ли вообще такие запросы писать. Может просто правильно настроить отчётник?
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747791
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбери просто через LEFT JOIN.
А транспонируй в отчётнике.

Мы уже поняли, что ты фанат проктоиллюзионных решений, и пора начать наставлять на путь истинного сиквелиста.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747794
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

а каким образом использовать left join если у них поля общего нет?
Т.е. это должны быть из таблицы два противоположных набора записей типо "not in" и "in".

Получается, лучше настроить правильный вывод в ексельку через несколько запросов?

Раньше был один столбик, а сейчас нужно стало два.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747804
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

SELECT
CASE WHEN IS NULL THEN "НЕ оперировался" ELSE "Оперировался" AS ГруппаПациентов,
Пациент
СписокПациентов LEFT JOIN СписокОпераций ПО "Соединены один ко многим"

В отчётнике колонки - ГруппаПациентов, строки - Пациенты.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747830
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RphoenixМне нужно разделить в запросе на оперированных и нет.
...параметры выборки.... - это дата выписки, отделение и т.д.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT  s.family||' '||s.name||' '||s.father AS FIO
  FROM spisok s 
  WHERE  ...параметры выборки.... and s.KEY_SPISOK IN (
      SELECT KEY_SPISOK_OPERAT
        FROM OPERAT 
        WHERE KEY_SPISOK_OPERAT IN (
            SELECT sss.KEY_SPISOK FROM SPISOK sss where ...параметры выборки....


Какое-то масло масляное.
Код: plsql
1.
2.
3.
4.
SELECT  DISTINCT s.family||' '||s.name||' '||s.father AS FIO,
  IIF(o.KEY_SPISOK_OPERAT IS NOT NULL, 1, 0) AS WAS_OPERATED
  FROM SPISOK s
    LEFT JOIN OPERAT o ON o.KEY_SPISOK_OPERAT = s.KEY_SPISOK
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747834
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

FB2.5+Excel. Пиши хранимку или execute block. Транспонирование данных запроса в Экселе непростой путь.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747837
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни, от него надо таки добиться, что же в этом списке книг, тьфу, поциентов является опорным наброром. Книги, поциенты, операции? Т.е. сколько строк и на основании чего должно быть в ответе. А насытить потом эти строки нужными колонками после этого будет уже делом техники.))
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747839
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то вы свои джойны не туда (не в то место) сейчас ему понавставляете.)))
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747841
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

да нет там ничего опорного. Знаю я такие отчёты. Самому давали. Это по сути две разные таблички которые растут в высоту независимо. Их когда-то от руки заполняли, теперь вот автоматизировать решили.
Проблема скорее в том в этом отчёте табличка одна и разлинеровка должна расти сразу для обоих столбцов.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747844
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Не, но погодь, пусть сам всеже ответит.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747845
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто пусть тут полежит :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
/*
create table T (id integer, isOper integer)
--
insert into T
with recursive cte as (
    select 1 as id, iif(sign(rand()-0.5)=0,1,sign(rand()-0.5)) as isOper from rdb$database

    union all

    select id+1, iif(sign(rand()-0.5)=0,1,sign(rand()-0.5)) as isOper from cte
    where id <30
)
select * from cte

select * from T
*/



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
with
T1 as
    (select
        T.*,
        rdb$set_context('USER_TRANSACTION','row1',cast(coalesce(rdb$get_context('USER_TRANSACTION','row1'),0) as integer)+1) as X,
        cast(rdb$get_context('USER_TRANSACTION','row1') as integer) as rownum
    from T where isOper=1),
T2 as
    (select
        T.*,
        rdb$set_context('USER_TRANSACTION','row2',cast(coalesce(rdb$get_context('USER_TRANSACTION','row2'),0) as integer)+1) as X,
        cast(rdb$get_context('USER_TRANSACTION','row2') as integer) as rownum
    from T where isOper=-1)


select
    rownum
    ,max(case when isOper=1 then id end) as id1
    ,max(case when isOper=-1 then id end) as id2
    ,rdb$set_context('USER_TRANSACTION','row1',null) as X1
    ,rdb$set_context('USER_TRANSACTION','row2',null) as X2
from
    (
    select * from T1
    union all
    select * from T2
    )  q
group by rownum
order by rownum



ROWNUMID1ID21122433954106512761887191182013921141026151127161229171330221423152416251728
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747857
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

Тут что же тебе помойка? или нужник? =8-[ ]
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747897
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, есть связь по ключу, номеру строки в ексельке. Это поле называется "u.nom_stroki". u.nomib - это номер истории.

Запрос к процедуре выглядит так
Код: sql
1.
2.
3.
4.
5.
6.
select u.nom_stroki, u.name_stroka, u.nomib, u.gp from HIRURG_EKSTR_VOZR_SPISOK_U2 (
    :OTDELENIE_KEY_P,
    :OUT_STAC_DATE_S,
    :OUT_STAC_DATE_PO,
    :VOZR_S,
    :VOZR_PO) u



Выводит всех (оперированных и нет).

Поле "u.gp" определяет, была или нет операция (смотрите скрин).

Сама процедура все отрабатывает за исключением того, что нужно правильно разбить на два столбика u.nomib - была/не было операции (по u.gp).
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747907
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

Ты вот с кем, милый друг, сейчас разговариваешь?
Давай еще раз, упомянутый список1 (пациенты?) имеет внутри по одной строке на каждого пациента?
В выходных данных тебе надо ровно столько строк, сколько в списке1?
ОН опорный?
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747911
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

nomib - это пациенты (их номера);
gp - оперировался или нет;
nom_stroki - опорный.
Нужно разбивку nomib сделать на два поля, в одном оперированные, а во втором нет (по gp) по полю nom_stroki.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747917
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

вот здесь 21760313 ответ

схематично как-то вот так

--курсор1 - оперировались
--курсор2 - не оперировались

цикл(True)
fio1=null;
fio2=null

получить запись из курсора1
получить запись из курсора2
если не получили запись из курсора1 и не получили запись из курсора2 то выход из цикла

suspend;
конец цикла

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

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

Милый друг, ты не медик случайно по образованию?
Все это напоминает старинную интермедию Винакура про посещение поликлиники
в части визита к "неврипитологу". У меня даже глаз уже также дергается.
Я, так и быть, помогу разбить твоих поциентов на прооперированных и недооперированных
если ты мне совершенно точно, буква в букву ответишь вот на этот вопрос 21764013
без привлечения всяких скушных ном_строки и т.д.
P.S.Не доводи до греха.
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747946
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIТранспонирование данных запроса в Экселе непростой путь.Чё это? Как раз самый простой.
Ctrl+C, "Специальная вставка" + флажок "транспонировать".
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747981
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryKreatorXXIТранспонирование данных запроса в Экселе непростой путь.Чё это? Как раз самый простой.
Ctrl+C, "Специальная вставка" + флажок "транспонировать".
Это понятно. Но ТС пишет запрос в Экселе, который превращается в некую таблицу. А её нужно преобразовать. Слово "транспонироаать" не совсем то. Я подразумевал - превратить данные из запроса в шахматку, допустим, из двух полей. Если есть "отчётник", который это может сделать это одно. А Эксель?
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39747997
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIЯ подразумевал - превратить данные из запроса в шахматку, допустим, из двух полей. Если
есть "отчётник", который это может сделать это одно. А Эксель?

А Ёксель как раз и есть такой отчётник. Поэтому я и спросил ТСа умеет ли он вообще им
пользоваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39748009
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА Ёксель как раз и есть такой отчётник. Поэтому я и спросил ТСа умеет ли он вообще им
пользоваться.
+1.
Хоть по спирали можно значения вывести.
Я программист, я так вижу (ц).
...
Рейтинг: 0 / 0
два запроса к одной таблице сделать в один запрос
    #39748378
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad Fнедооперированных

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


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