Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложный запрос  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2884
У меня этот запрос реализован в Access, а сейчас хочу реализовать его в SQL:

patients
• id_patient
• patient_name

patients_history
• id_patients_history
• id_patient
• visit_date

baza_test
• id_baza_test
• id_patients_history
• id_test
• result

Запрос 1
SELECT	id_patients_history
id_test
result
FROM baza_test AS ALT
WHERE id_test in(1,2)

Запрос 2
SELECT	id_patients_history
id_test
result
FROM baza_test AS AST
WHERE id_test in(3,4)

Запрос 3
SELECT	id_patients_history
id_test
result
FROM baza_test AS PLT
WHERE id_test in(5,6)

Между этими тремя запросами делала внутреннюю связь по id_patients_history

В результате, для каждого id_patients_history получала для 3 значения result в одну строку:

patient_name, для id_test (1 или 2) его result, , для id_test (3 или 4) его result, , для id_test (5 или 6) его result


Я использовала PIVOT, но здесь вынуждена была включить COUNT, а он мне совершенно не нужен.
SELECT	id_patient_history, [1], [2], [3]
FROM	(
	SELECT	id_patient_history,
			id_test, 
			pasuxi
	FROM	baza_patient_tests
	WHERE	id_laboratory=3 AND id_test in (1,2,3)
	) MyTable
PIVOT	(
		COUNT(id_test) FOR id_test in ([1], [2], [3])
		) MyReport
12 фев 17, 00:45    [20204029]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume , п.4 и п.6
12 фев 17, 01:36    [20204100]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2884
По первому варианту я пока что не поняла, что я могу сообщить, пока что пытаюсь в самом SQL реализовать этот запрос. На данный момент я занимаюсь переводом всех запросов из Access в SQL. Использую ODBC и SQL 2012.

По-видимому я неудачно сформировала вопрос того, что хотела получить в реальности.
В общем, есть список пациентов со своими данными, У каждого есть свои визиты в клинику, где делаются определенные анализы. Надо вывести список визитов каждого пациента с результатами анализов. Дополнительно, для трех анализов ALT, AST и PLT вывести по формуле еще одно значение.

Пациент Возраст ALT AST PLT Формула ((Возраст * ALT)/(AST*PLT))
Иванов 24 2.34 3.45 5.67 3.2
Петров 42 3.45 3.54 4.65 3.65
Максимов 32 4.24 4.32 4.652.45


Для ALT, AST, PLT при каждом визите испотльзуется либо первый, либо второй вариант, в зависимости от того по какой программе пришел пациент, Так что в визите встретится либо коды анализов 1, 3 и 5 или же, наоборот, 2, 4, 6.

вариант 1 вариант 2
ALT 1 2
AST 3 4
PLT 5 6
12 фев 17, 11:56    [20204375]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
NickBell,

Вам никто не ответит на эфемерные вопросы в вакууме

Лучше приведите репро данных (структуру таблиц + хотя бы тестовую начинку) и желаемый результат что хотите получить.
12 фев 17, 12:34    [20204462]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2884
felix_ff,

1) Структура таблиц выше приведена полностью. В них только те поля, которые нужны на данный момент. Не понимаю претензий по этому вопросу.
2) То что хочу получить в результате, это тоже описано.
12 фев 17, 12:47    [20204495]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
iljy
Member

Откуда:
Сообщений: 8711
NickBell
felix_ff,

1) Структура таблиц выше приведена полностью. В них только те поля, которые нужны на данный момент. Не понимаю претензий по этому вопросу.
2) То что хочу получить в результате, это тоже описано.


В рекомендациях, ссылку на которые вам дали, есть даже пример, как оформление должно выглядеть. Ваша "структура" далека от него, как бабуин от марсохода. А то, что нужно получить в результате "сложного" запроса, делается тупым-претупым join ваших трех запросов по id_patients_history
12 фев 17, 13:07    [20204554]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
aleks2
Guest
iljy
NickBell
felix_ff,

1) Структура таблиц выше приведена полностью. В них только те поля, которые нужны на данный момент. Не понимаю претензий по этому вопросу.
2) То что хочу получить в результате, это тоже описано.


В рекомендациях, ссылку на которые вам дали, есть даже пример, как оформление должно выглядеть. Ваша "структура" далека от него, как бабуин от марсохода. А то, что нужно получить в результате "сложного" запроса, делается тупым-претупым join ваших трех запросов по id_patients_history

Да ладно те, чайник первый запрос в MS SQL ваяет.

;
with
      q1 as ( SELECT top(1) id_patients_history, id_test, result FROM baza_test WHERE id_test in( 1, 2 ) )
   ,  q2 as ( SELECT top(1) id_patients_history, id_test, result FROM baza_test WHERE id_test in( 3, 4 ) )
   ,  q3 as ( SELECT top(1) id_patients_history, id_test, result FROM baza_test WHERE id_test in( 5, 6 ) )
select q1.id_patients_history
       , id_test1 = q1.id_test, result1 = q1.result
       , id_test2 = q2.id_test, result2 = q2.result
       , id_test3 = q3.id_test, result3 = q3.result
  from q1 
          inner join q1 on q1.id_patients_history = q1.id_patients_history
          inner join q3 on q3.id_patients_history = q1.id_patients_history;
12 фев 17, 15:45    [20204818]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2884
aleks2,

:) ... Большое спасибо за помощь, получилось именно то, что нужно было.
Когда top(1) убрала, то все записи появились.
Стиль записи второй части в данном запросе мне не был знаком, учту в дальнейшем, и я очень надеюсь, что в скором будущем привыкну к новому стилю написания запросов.
12 фев 17, 20:43    [20205282]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
aleks2
Guest
NickBell
aleks2,

Когда top(1) убрала, то все записи появились.


Врешь.
13 фев 17, 06:25    [20205850]     Ответить | Цитировать Сообщить модератору
 Re: Сложный запрос  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2884
aleks2
NickBell
aleks2,

Когда top(1) убрала, то все записи появились.


Врешь.


Нет, я перепроверила, так и было.
Скорее всего это произошло из-за того, что раньше, не обязателен был третий анализ. Это сейчас, из-за одной программы , ввели обязательство третий анализ использовать, так как в формуле должны были участвовать значения трех анализов и возраст человека. И по-видимому, там, где не было полного комплекта анализов, top(1) не смог работать должным образом.
Но top(1) всё-равно, в данном случае, не обязательно использовать, так как больше одной записи никак не должно появиться, если только регистраторша насильно не забросит дополнительно тот же самый анализ в базу. Но этого не произойдет, а если и произойдет, то уберут обязательно.
13 фев 17, 12:52    [20207081]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить