Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
illya_nub Member Откуда: Сообщений: 2 |
Здравствуйте! Пишу Вам как корифеям в области. Вопрос: Определить наименование организаций, сделавших более 5 заказов. Схема БД в приложении,саму БД не знаю как прикрепить. Попытаюсь описать словами,там только связи важны. Таблица "Организации" связана с таблицей "Клиенты" так(PK-ОрганизацииID - FK-KлиентID) далее там вроде понятно что к чему. Буду очень признателен за любую активность в моём направлении! Очень нужно именно разобраться и понять что и как. К сообщению приложен файл. Размер - 118Kb |
19 мар 17, 20:46 [20311471] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
И что не получается? |
19 мар 17, 23:20 [20311833] Ответить | Цитировать Сообщить модератору |
aleksrov Member Откуда: Сообщений: 948 |
Какая та странная схема. В таблице Клиенты PK по МенеджерКлиентаID, но у одного менеждеоа может быть несколько клинтов, так? Тогда мне кажется PK должен быть по МенеджерКлиентаID, КлиентID. Информация о сотудниках вынесена отдельно, а менеджер это не сотрудник? По сути 2 раза дублируете информацию о телефоне. Если у клиента может быть только один менеждер, то таблицу клинты и организации можно обьеденить, сделав PK_IDКлиент. Также если у клинта только один мененжер информацию о менеджере убрать из заказов, а при необходимости ее получим из таблица клиенты, которая будет связано с таблицей сотрудники. И много чего еще. |
20 мар 17, 07:23 [20312179] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
Схему - в мусор. Читать теорию по анализу предметной области. Пока не усвоится - за схему можно даже не браться, всё равно на выброс получится. |
||
20 мар 17, 08:22 [20312227] Ответить | Цитировать Сообщить модератору |
aleksrov Member Откуда: Сообщений: 948 |
Akina, Ну да, что то я про отпуска и больничные для менеджеров забыл :) А схема да, ни о чем. |
20 мар 17, 08:30 [20312239] Ответить | Цитировать Сообщить модератору |
angro Member Откуда: Сообщений: 389 |
illya_nub, так примерно select организации.название, count(заказы.менеджерклиентаid) from заказы left join клиенты on клиенты.менеджерклиентаid = заказы.менеджерклиентаid left join организации on клиенты.клиентid = организации.организацииid group by организации.название having count(заказы.менеджерклиентаid)>5 |
20 мар 17, 10:27 [20312722] Ответить | Цитировать Сообщить модератору |
aleksrov Member Откуда: Сообщений: 948 |
angro, Да забейте, с этой схемой любой запрос будет корявым. К примеру мне нужно посмотреть какой товар вообще был куплен, т.е. таблицу заказы мне нужно обьеденить с таблицей заказано товаров, потом ее с таблицей склад, а потом еще из отдельной таблицы которая тоже нафиг не нужна вытащить наименование, бред! |
20 мар 17, 10:36 [20312778] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Плохая организация хранения, содержит и избыточности и противоречия. Например, зачем состояние заказа вынесли отдельно? У заказа может быть несколько состояний одновременно или вы обрабатываете миллионы заказов он-лайн? |
20 мар 17, 11:07 [20312971] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Правда, для вопроса ТС эти таблицы не нужны. |
||||
20 мар 17, 19:15 [20315327] Ответить | Цитировать Сообщить модератору |
illya_nub Member Откуда: Сообщений: 2 |
Спасибо Вам! Разобрался....Был с самого начало прав,но ввиду анскильности тупил на ровно месте.... Вот запрос, решающий эту задачу : В MSSMS
|
|
20 мар 17, 20:51 [20315574] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |