![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запросы и БД! [D7, XP]
Loona © (2007-05-25 01:56:00)Здравствуйте, у меня возник вопрос:
есть БД, по SQL запросу выдает нужные данные - как теперь эти данные,т.е новую таблицу сохранить, чтобы потом можно было работать с ее элементами?? мне нужно найти среднее значение в каждом столбце новой матрицы ( потом значение ячейки - среднее разделить на среднее и уможить на коэффициент и так 10 ячеек по каждому столбцу!!) а потом построить график...Помогите пожалуйста, совсем не получается :(((
Kostafey (2007-05-28 00:56:00) [1]> Для одного пациента в необходимое_поле1, 2, 3 есть по десять
> значений и мне их просуммировать надо!!!!!!
Это что ж получается. Одно поле содержит 10 значений ???
Если так, то рекомендую познакомится с нормализацией базы данных
(в частности с первой нормальной формой).
Это что за тип поля такой, в котором содержится 10 значений (притом видимо числовых)???
Если не так, то я ничего не понял.
> А получается что я суммирую все значения в необходимом_поле1(2,3)
Это > [29] Kostafey ©по-твоему так нужно описывать?
Не так. Поля результирующего набора данных значения вычисляются
путем ... (таких-то вычислений)
терминология в таком духе.
> а мне нужно только десять тех, которые принадлежат выбранному
> пациенту!
Опять несуразная, ИМХО фраза, ибо в > [29] Kostafey ©
вычисления производятся исключительно для 1 записи (т.е. параметры требуемого пациента).
> уф, вроде так.
Well, try again...
Loona (2007-05-27 16:21:00) [2]нее, не так я наверное опять туплю, извиняйте...
Для одного пациента в необходимое_поле1, 2, 3 есть по десять значений и мне их просуммировать надо!!!!!! для каждого поля в отдельности..
А получается что я суммирую все значения в необходимом_поле1(2,3) а мне нужно только десять тех, которые принадлежат выбранному пациенту!
уф, вроде так.
Kostafey (2007-05-27 15:59:00) [3]Так и в чем сложность?
Можно просто писать (заодно и параметры применим):
select
(
параметры.Необходимое_поле1 -
(параметры.Необходимое_поле1+параметры.Необходимое_поле2+параметры.Необходимое_поле3)/3
),
(
параметры.Необходимое_поле2 -
(параметры.Необходимое_поле1+параметры.Необходимое_поле2+параметры.Необходимое_поле3)/3
),
(
параметры.Необходимое_поле3 -
(параметры.Необходимое_поле1+параметры.Необходимое_поле2+параметры.Необходимое_поле3)/3
)
from Пациент, исслдование, параметры
where Фамилия like %:FamiliyaParam%
and Пациент.Key1 = Исследование.ID_pat
and Исследование.Key1 = параметры.ID_inv
Loona (2007-05-27 15:34:00) [4]
> Сформулируй доходчиво.
> <Цитата>
Ну я извиняюсь...
Нужно считать среднее не всех полей, а полей которые принадлежат этому пациенту. То есть для одной записи все делать!!!!
Kostafey (2007-05-27 12:28:00) [5]> получается что срднее он считает по всем полям, не только
> по тем что принадлежат выбранному пациенту
Считает и правильно делает. Я ведь именно так и понял вопрос.
А как еще нужно понимать фразу
> **значение ячейки минус среднее значение столбца и разделить
> на среднее!!!
Берем значение поля вычитаем из него значение среднего арифметического
всех значений этого поля, получившуюся разность делим опять на среднее.
Что нужно-то? Нужно среднее арифметическое 3-х полей таблицы параметры,
соответсвующей выбранному пациенту ?
Так так и скажи.
Сформулируй доходчиво.
Anatoly Podgoretsky (2007-05-27 10:12:00) [6]> Loona (27.05.2007 03:01:24) [24]
Используй параметры, а то постоянно будешь мучаться с подсчетом кавычек и введенными данными.
Loona (2007-05-27 03:26:00) [7]вообщем он считает для всех записей, хоть и на экране выводит для одной :((( совсем запуталась :(
Loona (2007-05-27 03:01:00) [8]Я наверное уже замучила, но все же...
получается что срднее он считает по всем полям, не только по тем что принадлежат выбранному пациенту, а когда пишу выбрать (
> 'where Фамилия like ''%'+EditFIO1.text+'% '
> +#13#10+
> 'and Пациент.Key1 = Исследование.ID_pat '
> +#13#10+
> 'and Исследование.Key1 = параметры.ID_inv ';
) выдает ошибку типа пропущен оператор :(((
Kostafey (2007-05-26 21:19:00) [9]> А где потом увидеть результаты всего этого и как их вывести?
> ? надо новое поле в таблице создать или как?
Мы получаем обычный набор данных.
Так и выводим его стандартными средствами.
Полям для удобства можно присвоить псевдонимы.
Вообще, по SQL много в Internet информации есть.
> Что это значит?
Предположу, что я мог ошибится в наборе SQL, ибо я его не тестировал.
Протестировал теперь на Access. Исправь
>'select ' +#13#10+
>'(параметры.Необходимое_поле1 - ' +#13#10+
>' ( ' +#13#10+
>' select avg(параметры.Необходимое_поле1) from параметры ' +#13#10+
>' )) / ' +#13#10+
>' ( ' +#13#10+
>' select avg(параметры.Необходимое_поле1) from параметры ' +#13#10+
>' ), ' +#13#10+
на: (кавычки только добавить не забудь)
select
(
параметры.Необходимое_поле1 -
(
select avg(параметры.Необходимое_поле1) from параметры
)
) /
(
select avg(параметры.Необходимое_поле1) from параметры
)
from параметры
Loona (2007-05-26 21:01:00) [10]
> Это значит, что самое время перквалифицироваться в управдомы
> ;)
очень смешно:)))
MsGuns (2007-05-26 20:51:00) [11]>Loona © (26.05.07 20:35) [20]
>Что это значит?
Это значит, что самое время перквалифицироваться в управдомы ;)
Loona (2007-05-26 20:35:00) [12]выдает ошибку :
Project ... raised exception class EAccessViolation with Message 'Access violation at adress 1b041fc6 in module 'msjet40.dll'. read of adres 0005242E/ :(
Что это значит?
Loona (2007-05-26 20:25:00) [13]
> Давай уже с терминологией дружить начнем.
>
> Столбцы и строчки - это к сеткам (DBGrid)
> Поля и записи, уху ?
уху :)
А где потом увидеть результаты всего этого и как их вывести?? надо новое поле в таблице создать или как?
Kostafey (2007-05-26 16:52:00) [14]Давай уже с терминологией дружить начнем.
Столбцы и строчки - это к сеткам (DBGrid)
Поля и записи, уху ?
> Из всех параметов соответствующих найденному пациенту -
> есть 3 столбца, которые хранятся в таблице "ПАРАМЕТРЫ" .
> И каждый этот столбец нужно считать в соответствии с формулой!
> Т.е необходимо иметь доступ ко всем строчкам (их 10) и
> столбцам (их 3) чтбы все посчитать для одного пациента.
А чем тогда > [11] Kostafey ©не устраивает.
Каждое поле по такому принципу вычислять нужно? Можно просто писать:
DataModule1.FindQuery.Active:=false;
DataModule1.FindQuery.SQL.Text:=
'select ' +#13#10+
'(параметры.Необходимое_поле1 - ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле1) from параметры ' +#13#10+
' )) / ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле1) from параметры ' +#13#10+
' ), ' +#13#10+
'(параметры.Необходимое_поле2 - ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле2) from параметры ' +#13#10+
' )) / ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле2) from параметры ' +#13#10+
' ), ' +#13#10+
'(параметры.Необходимое_поле3 - ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле3) from параметры ' +#13#10+
' )) / ' +#13#10+
' ( ' +#13#10+
' select avg(параметры.Необходимое_поле3) from параметры ' +#13#10+
' ) ' +#13#10+
'from Пациент, исслдование, параметры ' +#13#10+
'where Фамилия like ''%'+EditFIO1.text+'% ' +#13#10+
'and Пациент.Key1 = Исследование.ID_pat ' +#13#10+
'and Исследование.Key1 = параметры.ID_inv ';
DataModule1.FindQuery.Active:= true;
PoiskForm.ShowModal;
MsGuns (2007-05-26 16:32:00) [15]>И каждый этот столбец нужно считать в соответствии с формулой! Т.е необходимо иметь доступ ко всем строчкам (их 10) и столбцам (их 3) чтбы все посчитать для одного пациента
Подумаешь, бином Ньютона (с)
Изучаем SQL.
Loona (2007-05-26 15:47:00) [16]> СУБД, технология доступа ?
БД Access, ADO
> Вопрос я к сожалению до конца так и не понял, но попробую
> ответить на сколько понял.
>
> А что же я понял? Нужно получить набор данных из 1 записи
> (на самом деле их
> наверняка будет больше, ибо 'where Фамилия like ''%'+EditFIO1.
> text+'%'),
> содержащих 3 поля характеризующих параметры одного пациента,
> при этом
> значение одного из полей должно вычисляться по принципу:
>
Из всех параметов соответствующих найденному пациенту - есть 3 столбца, которые хранятся в таблице "ПАРАМЕТРЫ" . И каждый этот столбец нужно считать в соответствии с формулой! Т.е необходимо иметь доступ ко всем строчкам (их 10) и столбцам (их 3) чтбы все посчитать для одного пациента.
Kostafey (2007-05-26 13:34:00) [17]> Скажу Вам как художник художнику: "Пациентов нужно идентифицировать
> по номеру истории болезни и ни как иначе"!
А поиск производить по фамилии.
Вообще, такие вещи должны согласовываться прежде всего с заказчиком,
исходя из предметной области и пожеланий пользователей.
Одним словом, сейчас это на совести автора сабжа.
DrAndrey (2007-05-26 13:29:00) [18]>DataModule1.FindQuery.SQL.Add('where Фамилия like ''%'+EditFIO1.text+'%''');
Скажу Вам как художник художнику: "Пациентов нужно идентифицировать по номеру истории болезни и ни как иначе"!
Kostafey (2007-05-26 13:16:00) [19]> 'and Исследование.Key1 = параметры.ID_inv ' +#13#10+
Конечно нужно писать 'and Исследование.Key1 = параметры.ID_inv ';
Kostafey (2007-05-26 12:50:00) [20]Необходимое_поле1, Необходимое_поле2, Необходимое_поле3 - заменить реальными именами полей.