powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / help Написать запрос
25 сообщений из 35, страница 1 из 2
help Написать запрос
    #39487951
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет. Есть выборка из таблиц с объединением
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select
*
from priem
   left join pocient on (priem.poc_id = pocient.poc_id)
   inner join podrazdelenij on (priem.podr_id = podrazdelenij.podr_id)
   right join diagnoz_full on (priem.dia_id = diagnoz_full.dia_id)
   inner join diagnoz_mkb on (priem.diamkb_id = diagnoz_mkb.diamkb_id)
   inner join adr_city on (adr_city.adrc_id = pocient.adrc_id)
   inner join adr_street on (adr_street.adrs_id = pocient.adrs_id)
where
 (
   (
     priem.pr_date > :pr_date
    )
   
  )


как сделать, чтобы при выборе не повторялись записи (допустим есть "Пациент" и у него два разных "диагноза в разные даты.
При использовании данной выборки мне возвращаются на этого "Пациента" 2 записи с разными датами и диагнозами), а записи по этому "Пациенту" шли в строкой, но в разных столбцах. Допустим (Иванов Иван Иванович | 01.01.01 | Здоров | 02.02.02 | Болен |
использовать List() не вариант так как после экспорта в Excel выборка по данному полю будет не корректной (
...
Рейтинг: 0 / 0
help Написать запрос
    #39487952
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить FB 2.5
ООП: Delphi
...
Рейтинг: 0 / 0
help Написать запрос
    #39487953
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Непонятно что тебе в итоге требуется. Список пациентов? Список пациентов с диагнозами в одну строку?
2. select * - смотри п.1
...
Рейтинг: 0 / 0
help Написать запрос
    #39487956
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это же твоя тема с тем же запросом, и так же вопрос задал и в кусты?
http://www.sql.ru/forum/1262042/slozhnyy-zapros-na-vyborku?hl=
...
Рейтинг: 0 / 0
help Написать запрос
    #39487959
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksА вот это же твоя тема с тем же запросом, и так же вопрос задал и в кусты?
http://www.sql.ru/forum/1262042/slozhnyy-zapros-na-vyborku?hl=

там был вопрос в другом... и с ним я разобрался
...
Рейтинг: 0 / 0
help Написать запрос
    #39487960
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks1. Непонятно что тебе в итоге требуется. Список пациентов? Список пациентов с диагнозами в одну строку?
2. select * - смотри п.1
...
Рейтинг: 0 / 0
help Написать запрос
    #39487962
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хоть толкнуть в правильном направлении
...
Рейтинг: 0 / 0
help Написать запрос
    #39487965
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100хоть толкнуть в правильном направлении

group by + list
или
for select с вложенным for select
...
Рейтинг: 0 / 0
help Написать запрос
    #39487967
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100использовать List() не вариант так как после экспорта в Excel выборка по данному полю будет не корректной (

Осталось непонятным чем не подходит list и при чем тут выборка в Excel.
...
Рейтинг: 0 / 0
help Написать запрос
    #39487968
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
inferno100,
Использовать List() самый правильный вариант. Если вторым параметром функции List() использовать тотже ascii_char, который используется как разделитель полей при экспорте в exel, то все будет ок.
...
Рейтинг: 0 / 0
help Написать запрос
    #39487975
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sonkzИспользовать List() самый правильный вариант.

При List невозможно задать порядок склейки внутри List. Это может быть препятствием. Но ТС это не озвучил.
...
Рейтинг: 0 / 0
help Написать запрос
    #39487976
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100хоть толкнуть в правильном направлении

Перечислить вместо * реальный минимально необходимый набор полей.
Сейчас у тебя по * выдаются все поля всех шести таблиц.
...
Рейтинг: 0 / 0
help Написать запрос
    #39487979
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksinferno100хоть толкнуть в правильном направлении

Перечислить вместо * реальный минимально необходимый набор полей.
Сейчас у тебя по * выдаются все поля всех шести таблиц.

только с отбором по JOIN
...
Рейтинг: 0 / 0
help Написать запрос
    #39487981
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100fraksпропущено...


Перечислить вместо * реальный минимально необходимый набор полей.
Сейчас у тебя по * выдаются все поля всех шести таблиц.

только с отбором по JOIN

Я не про where говорил а про набор полей на выходе.
...
Рейтинг: 0 / 0
help Написать запрос
    #39487982
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksinferno100пропущено...


только с отбором по JOIN

Я не про where говорил а про набор полей на выходе.

я тебя понял.. сори )
...
Рейтинг: 0 / 0
help Написать запрос
    #39488011
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksПри List невозможно задать порядок склейки внутри List. Это может быть препятствием. Но ТС это не озвучил.

Возможно.
Пишем select с order by по нужному полю (по которому хотим порядок склейки), а агрегируем в лист используя select from select

Код: sql
1.
select list(q.field1,',') from (select table1.field1 from table1 order by table1.some_other_field) q
...
Рейтинг: 0 / 0
help Написать запрос
    #39488086
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где пример данных? где скрипт с метаданными? Где набросок требуемого результата? В таком виде топик кандидат на убой.

Название я поправил.
...
Рейтинг: 0 / 0
help Написать запрос
    #39488090
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sonkz,

можете привести явный пример..... если не сложно с использованием JOIN
или я такой или не те книги читаю, что не получатся у меня с ним работать (((
...
Рейтинг: 0 / 0
help Написать запрос
    #39488163
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100,

не люблю я right join. Его всегда можно привести к left join. Так удобнее и меньше путаницы.
И ещё все outer join лучше делать после inner join если это возможно.
...
Рейтинг: 0 / 0
help Написать запрос
    #39488186
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
inferno100,

Да нет проблем!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select q.poc_id, List (cast(q.pr_date as varhar(20))|| ' | ' ||cast(q.dia_id  varchar(20)), ascii_char(9))

from (

select
pocient.poc_id, priem.pr_date, diagnoz_full.dia_id
from priem
   left join pocient on (priem.poc_id = pocient.poc_id)
   inner join podrazdelenij on (priem.podr_id = podrazdelenij.podr_id)
   right join diagnoz_full on (priem.dia_id = diagnoz_full.dia_id)
   inner join diagnoz_mkb on (priem.diamkb_id = diagnoz_mkb.diamkb_id)
   inner join adr_city on (adr_city.adrc_id = pocient.adrc_id)
   inner join adr_street on (adr_street.adrs_id = pocient.adrs_id)
where
 (
   (
     priem.pr_date > :pr_date
    )
   
  )
order by pocient.poc_id, priem.pr_date
) q



Номер карты куда переводить ЗП написать?
...
Рейтинг: 0 / 0
help Написать запрос
    #39488187
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут я разобрался
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
    priem.poc_id,
    LIST(priem.pr_date, ' ; '),
    list(priem.dia_id, ' ; '),
FROM priem

  GROUP BY priem.poc_id;


но вот как сюда прикрутить JOIN-ы не понимаю (((
...
Рейтинг: 0 / 0
help Написать запрос
    #39488202
sonkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
inferno100,

См. ответ на свое предыдущее сообщение.

P.S. sorry я там забыл
Код: sql
1.
group by q.poc_id
...
Рейтинг: 0 / 0
help Написать запрос
    #39488320
inferno100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sonkzinferno100,

select q.poc_id, List (cast(q.pr_date as varhar(20))|| ' | ' ||cast(q.dia_id varchar(20)), ascii_char(9))

[/src]

если не сложно можешь ее объяснить? для "особо" одаренных
как я понимаю это

( Выбрать q.poc_id, соединяя (преобразование типа (Дата в "текст") или "|" или преобразование целочисленного числа в "текст", разделитель спец.символ)
...
Рейтинг: 0 / 0
help Написать запрос
    #39488352
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inferno100 как я понимаю это
( Выбрать q.poc_id, соединяя (преобразование типа (Дата в "текст") или "|" или преобразование целочисленного числа в "текст", разделитель спец.символ)

'Hello'||'World'

в данном случае || это оператор конткатенации
На паскале было бы:

str := 'Hello'+'World';
...
Рейтинг: 0 / 0
help Написать запрос
    #39488354
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. сори
Конкатенации
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / help Написать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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