Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 20:05   #1
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию SQL Запрос в MS Access

Помогите с запросом.

имеется таблица Blood_add
в ней 2 столбца: VariantZabora, IDofDonor

VariantZabora здесь хранится только два значения ("Плазмаферез" или "Общий отдел")

так вот надо получить доноров(IDofDonor) тех, кто не сдавал определ вариант забора.

таблица такая:

VariantZabora IDofDonor
Плазмаферез 1
Общий отдел 1
Плазмаферез 2
Общий отдел 3

то есть выдать тех, у кого только 1 вариант забора: либо Общий отдел, либо Плазмаферез


я написал запрос, по которому выдает тех, кто сдавал 2 типа:
Код:
SELECT IDofDonor
FROM Blood_add
WHERE
IDofDonor   IN (SELECT IDofDonor FROM Blood_add WHERE VariantZabora IN ("Общий отдел"))  AND VariantZabora   IN ("Плазмаферез");
надо сделать чтобы выдавало кто сдавал только 1 вид......вот не получается(
для знающий думаю займет 2-3мин...
kedbl4 вне форума Ответить с цитированием
Старый 12.05.2010, 22:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так?
Код:
select IDofDonor from Blood_add 
group by VariantZabora, IDofDonor 
having count(*)=1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2010, 22:45   #3
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так?
Код:
select IDofDonor from Blood_add 
group by VariantZabora, IDofDonor 
having count(*)=1
не то выдает.... оно сгрупировало по варианту и выдало сначало все что относится к "общему отделу" потом к "Плазмаферезу"


вот на примере моей таблицы должно выдавать 2 и 3 IDofDonor
kedbl4 вне форума Ответить с цитированием
Старый 13.05.2010, 11:52   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

все почти так, но одно поле в группировке лишнее
Код:
select IDofDonor 
from Blood_add 
group by IDofDonor/*, VariantZabora*/
having count(*)=1
soleil@mmc вне форума Ответить с цитированием
Старый 13.05.2010, 13:24   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
все почти так, но одно поле в группировке лишнее
да, коллега, спасибо.
На самом деле, с одним полем будет работать, но я хотел "обезопасить" запрос, если вдруг по одному человеку будет более одного одинакового анализа (т.е. если будет
...
Плазмаферез 2
Плазмаферез 2
...
то донор 2 не будет выбран. Если такая ситуация невозможно, используйте запрос из #4

Если же такая ситуация возможна (хотя бы теоретически!), тогда поможет такой запрос:
Код:
select IDofDonor from 
  (select IDofDonor from Blood_add 
   group by VariantZabora, IDofDonor )
group by IDofDonor
having count(*)=1
order by IDofDonor
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2010, 14:44   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
"обезопасить" запрос, если вдруг по одному человеку будет более одного одинакового анализа (т.е. если будет
...
Плазмаферез 2
Плазмаферез 2
думаю, что хватит и такого запроса
Код:
select IDofDonor 
from Blood_add 
group by IDofDonor
having count(distinct VariantZabora) = 1
soleil@mmc вне форума Ответить с цитированием
Старый 13.05.2010, 16:01   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
думаю, что хватит и такого запроса
Но не в случае использования в MS Access...

ругается на ...count(distinct VariantZabora)
(причём, если distinct убираешь - работает, но, разумеется, неверно..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2010, 01:31   #8
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да, коллега, спасибо.
На самом деле, с одним полем будет работать, но я хотел "обезопасить" запрос, если вдруг по одному человеку будет более одного одинакового анализа (т.е. если будет
...
Плазмаферез 2
Плазмаферез 2
...
то донор 2 не будет выбран. Если такая ситуация невозможно, используйте запрос из #4

Если же такая ситуация возможна (хотя бы теоретически!), тогда поможет такой запрос:
Код:
select IDofDonor from 
  (select IDofDonor from Blood_add 
   group by VariantZabora, IDofDonor )
group by IDofDonor
having count(*)=1
order by IDofDonor
такая ситуация возможно,запрос идеально работает)
спасибо огромное за проделанную работу.


soleil@mmc тоже большое спс)

Последний раз редактировалось kedbl4; 14.05.2010 в 01:35.
kedbl4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на SQL в Access Hant111 SQL, базы данных 4 01.04.2010 22:48
Запрос SQL MS Access! Artanis SQL, базы данных 6 12.11.2009 20:05
НАдо сделать запрос на SQL для MS Access! Artanis SQL, базы данных 9 05.11.2009 15:03
Запрос SQL из Access в Delphi Talemir БД в Delphi 5 26.08.2009 20:46