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

Откуда:
Сообщений: 5
Вот есть такая таблица. В ней проверяется совместимы ли типы магазинов между собой(ну то есть можно ли рядом ставить магазины разных типов(например нежелательно ставить магазин автозапчастей, красок, стройматериалов рядом с открытым магазином продуктов например)
create table TShopCompatibility
(
idshoptype1 int NOT NULL,
idshoptype2 int NOT NULL,
primary key(idshoptype1,idshoptype2),
foreign key(idshoptype1) references TShopType(idshoptype),
foreign key(idshoptype2) references TShopType(idshoptype),
check(idshoptype1>idshoptype2)
) 


Таблица TShopType - таблица всех видов магазинов. Я занёс в эту таблицу данные
idshoptype1 idshoptype2
2 - 1
3 - 1
5 - 1
5 - 2
10 - 9
12 - 11
13 - 10

Где эти числа - id типов магазинов. И вот проблема в том что я не знаю как получить из этой таблицы например - список магазинов совместимых с магазином типа 2(это будут 1 3 5). или например с магазином типа 10(это будут 9 13)

Какой запрос надо сделать?
3 дек 12, 05:20    [13566215]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Rectangle, как-то так

declare @shop_type int=2

SELECT DISTINCT CASE WHEN idshoptype1=@shop_type THEN idshoptype2 ELSE idshoptype1 END
FROM TShopCompatibility
WHERE idshoptype1=@shop_type
      OR idshoptype2=@shop_type
3 дек 12, 05:44    [13566219]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
ErshovDmitry
Member

Откуда:
Сообщений: 2
Доброго времени суток!
Буквально на днях решил перенести рабочую базу на SQL, ни когда раньше не сталкивался с этим делом в общем новичок.
В Access уже наловчился делать базы уже с 2005 года моя база работает в нашей больнице в регистратуре, но к сожалению помпы с того времени так и не поменяли, а база всё растёт вот и решил перенести её на server SQL 2008 R2. Теперь проблема перенёс всю бузу на сервер включая формы, запросы, отчёты от некоторых запросов избавился но от некоторых не получается. Вот например этот запрос нужен для вывода Амбулаторного талана на печать

SELECT dbo.Пациенты.Фамилия, dbo.Пациенты.Имя, dbo.Пациенты.Отчество, dbo.ND3200.FAM, dbo.ND3200.IM, dbo.ND3200.OT, dbo.ND3200.DR,
dbo.Пациенты.Дата_Рождения, dbo.Пациенты.Код_Категории_льготы, dbo.Пациенты.Документ, dbo.Пациенты.Номер_документа,
dbo.Пациенты.Страховой_полис, dbo.Пациенты.СНИЛС, dbo.Пациенты.Код_Пациента, dbo.Пациенты.Адрес, dbo.Пациенты.Пол,
dbo.Пациенты.Социальный_Статус, dbo.Пациенты.Подразделение, dbo.Пациенты.Звание, dbo.Пациенты.Код_Занятости,
dbo.Пациенты.Инвалидность, dbo.Пациенты.Житель, dbo.Пациенты.Компания
FROM dbo.Пациенты INNER JOIN
dbo.ND3200 ON dbo.Пациенты.Фамилия = dbo.ND3200.FAM AND dbo.Пациенты.Имя = dbo.ND3200.IM AND
dbo.Пациенты.Отчество = dbo.ND3200.OT AND dbo.Пациенты.Дата_Рождения = dbo.ND3200.DR
WHERE (dbo.Пациенты.Фамилия = N'ершов')

В условии отбора удалось поставить конкретную фамилию запрос работает но мне нужно, что бы выборка была из формы (Пациенты).

Может подскажите как можно сделать отчёт без запроса? или какую книгу почитать было бы лучше.
3 дек 12, 06:44    [13566239]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Добрый Э - Эх
Guest
Rectangle,

Так у тебя целое дерево совместимостей? Или линейный список?
Если дерево, то смотреть в сторону рекурсивного СТЕ
3 дек 12, 06:45    [13566241]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
ErshovDmitry, ветка форума по Access находится тут рядом - https://www.sql.ru/forum/actualtopics.aspx?bid=4
(ну и, как-то некрасиво задавать вопрос в "чужой" теме)

Сообщение было отредактировано: 3 дек 12, 06:47
3 дек 12, 06:47    [13566242]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Добрый Э - Эх
Guest
ErshovDmitry,

Оно и не удивительно, что у тебя ничего не получается. Ты даже вопрос-то правильно задать не смог. Кто тебе мешать создать отдельный топик? Зачем постить свой вопрос в пост другого автора, если темы ваших вопросов вообще никак не связаны друг с другом?
3 дек 12, 06:48    [13566245]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Добрый Э - Эх
Guest
tpg,

он переносит базу с акцеса на SQL Server, потому и вопрос задал в ветке скуль сервера.
Про пост в чужой теме - поддерживаю твое возмущение.
3 дек 12, 06:50    [13566249]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Добрый Э - Эх
tpg,

он переносит базу с акцеса на SQL Server, потому и вопрос задал в ветке скуль сервера.

Его ключевая проблема:
ErshovDmitry
В условии отбора удалось поставить конкретную фамилию запрос работает но мне нужно, >>>что бы выборка была из формы (Пациенты)<<<.
а это уже к клиенту относится (ага, скуль ещё акцессовскими формами не управлял). )))
3 дек 12, 06:54    [13566251]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
ErshovDmitry
Member

Откуда:
Сообщений: 2
Прошу прощения за чужой топик поторопился, а вообще здесь 63382 топиков неужели посетители смотрят все топики?
3 дек 12, 06:56    [13566252]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Добрый Э - Эх
Guest
ErshovDmitry
Прошу прощения за чужой топик поторопился, а вообще здесь 63382 топиков неужели посетители смотрят все топики?
Ну, все 63382, конечно же, никто не просматривает. Но вновь появившиеся топики и топики с новыми ответами - смотрят многие...
3 дек 12, 07:23    [13566287]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Rectangle
Member

Откуда:
Сообщений: 5
Ruuu
Rectangle, как-то так

declare @shop_type int=2

SELECT DISTINCT CASE WHEN idshoptype1=@shop_type THEN idshoptype2 ELSE idshoptype1 END
FROM TShopCompatibility
WHERE idshoptype1=@shop_type
      OR idshoptype2=@shop_type


но в данном случае вернет 1 и 5. но ведь поскольку 1 совместим с 3 то нужно что бы вернуло еще и 3. значит нужно повторять вызов запроса до тех пор пока все значения в таблице не пройдет? ну то есть после первого прохода оно найдет все магазины совместимые с 2 а потом надо выполнить то же самое для всех найденных значений?
3 дек 12, 12:35    [13567763]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Добрый Э - Эх
Guest
Таки дерево? Тогда рекурсивный СТЕ...
3 дек 12, 12:38    [13567788]     Ответить | Цитировать Сообщить модератору
 Re: выборка из таблицы совместимостей  [new]
Rectangle
Member

Откуда:
Сообщений: 5
Добрый Э - Эх
Таки дерево? Тогда рекурсивный СТЕ...



так а как тогда проходы то делать? ведь в данном случае алгоритм выходит такой

1) получаем список совместимых магазинов для нужного id
2) для каждого из списка совместимых объектов повторить операцию и записать в список(который был получен на предыдущем шаге) не повторяющиеся значения.
3)повторять и повторять...

то есть выходит что
with Shops_CTE as
(
   SELECT DISTINCT CASE WHEN idshoptype1=@shop_type THEN idshoptype2 ELSE idshoptype1 END
   FROM TShopCompatibility
   WHERE idshoptype1=@shop_type OR idshoptype2=@shop_type
   UNION
   ..........
)

Где @shop_type - параметр(наприме процедуры, переменная)

мне получается надо между скобок запрос из второго сообщения объединить с чем?
3 дек 12, 21:58    [13571443]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить