Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / два запроса к одной таблице сделать в один запрос / 25 сообщений из 26, страница 1 из 2
14.12.2018, 10:52
    #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
14.12.2018, 10:55
    #39747770
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
два запроса к одной таблице сделать в один запрос
Rphoenix,

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

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

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

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

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

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

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

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

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

В отчётнике колонки - ГруппаПациентов, строки - Пациенты.
...
Рейтинг: 0 / 0
14.12.2018, 12:08
    #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
14.12.2018, 12:17
    #39747834
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
два запроса к одной таблице сделать в один запрос
Rphoenix,

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

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

Не, но погодь, пусть сам всеже ответит.
...
Рейтинг: 0 / 0
14.12.2018, 12:29
    #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
14.12.2018, 12:49
    #39747857
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
два запроса к одной таблице сделать в один запрос
court,

Тут что же тебе помойка? или нужник? =8-[ ]
...
Рейтинг: 0 / 0
14.12.2018, 13:27
    #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
14.12.2018, 13:36
    #39747907
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
два запроса к одной таблице сделать в один запрос
Rphoenix,

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

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

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

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

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

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

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

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

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

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

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

А Ёксель как раз и есть такой отчётник. Поэтому я и спросил ТСа умеет ли он вообще им
пользоваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.12.2018, 16:04
    #39748009
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
два запроса к одной таблице сделать в один запрос
Dimitry SibiryakovА Ёксель как раз и есть такой отчётник. Поэтому я и спросил ТСа умеет ли он вообще им
пользоваться.
+1.
Хоть по спирали можно значения вывести.
Я программист, я так вижу (ц).
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / два запроса к одной таблице сделать в один запрос / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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