Здравствуйте, Перейду сразу к делу.
Есть 2 таблицы.
1 таблица "Монтажники" qdfMounters или tblMounters без разницы.
с полями ID - код , Mounter - монтажник, MounterType - тип монтажника (3 типа монтажника "Новичок, стандарт, профи")
2 таблица "Договора" qdfContracts или tblContracts без разницы
с полями ID - код , MounterID - код монтажника, ComplexityLevel - уровень сложности договора, ContractDate - дата договора (3 типа уровня сложности "Обычный, средний, сложный")
Задание такое
Нам нужно подбирать монтажника при составлении договора на какой либо день, проверять день и монтажника.
"если монтажник новичок-1 монтаж в день( уровень сложности-обычный )
если монтажник стандарт-2 монтажа в день ( уровень сложности--обычный+обычный ,обычный+средний,сложный)
если монтажник профи--2 монтажа в день ( уровень сложности-обычный+обычный,обычный+средний,средний+средний ,сложный)"
У меня получилось сделать только при проверке данного уровня контракта.
Если уровень данного договора к которому мы подбираем монтажника:
"Обычный" то,
"SELECT ID,Mounter FROM tblMounters WHERE ID Not In (SELECT MounterID FROM tblContracts WHERE FORMAT(ContractDate,'dd.MM.yyyy') = FORMAT(
,'dd.MM.yyyy') AND MounterID <> null Group By MounterID) AND MounterType = 'Новичок'"
Здесь я выбираю новичков, у которых нет договоров на данный день
+
SELECT ID,Mounter FROM tblMounters WHERE (ID Not In (SELECT a.MounterID FROM tblContracts as a,tblContracts as b WHERE a.ContractDate = b.ContractDate AND a.MounterID <> b.MounterID AND a.ContractDate =FORMAT(,'dd.MM.yyyy') Group by a.MounterID, b.MounterID having Count(*) = (SELECT Count(*) FROM tblContracts as c WHERE c.MounterID = a.MounterID) and Count(*) = (SELECT Count(*) FROM tblContracts as d WHERE d.MounterID = a.MounterID)) AND ID Not in (SELECT MounterID FROM tblContracts WHERE ContractDate = FORMAT(,'dd.MM.yyyy') AND ComplexityLevel = 'Сложный')) AND (MounterType = 'Стандарт' Or MounterType ='Профи')"
Здесь я выбираю Стандарт или профи но чтобы у них не был сложный уровень договора на данный день либо чтобы у них не было 2 договора на этот день, где -данный день на который мы выбираем контракт.
"Средний" то,
"SELECT ID,Mounter FROM tblMounters WHERE ID Not In (SELECT a.MounterID FROM tblContracts as a,tblContracts as b WHERE a.ContractDate = b.ContractDate AND a.MounterID <> b.MounterID AND a.ContractDate =FORMAT(,'dd.MM.yyyy') AND a.MounterID <> null Group by a.MounterID, b.MounterID having Count(*) = (SELECT Count(*) FROM tblContracts as c WHERE c.MounterID = a.MounterID) and Count(*) = (SELECT Count(*) FROM tblContracts as d WHERE d.MounterID = a.MounterID)) AND ID Not in (SELECT MounterID FROM tblContracts WHERE ContractDate = FORMAT(,'dd.MM.yyyy') AND ComplexityLevel = 'Сложный' AND MounterID <> null Group By MounterID) AND ID Not in (SELECT MounterID FROM tblContracts WHERE ContractDate = FORMAT(,'dd.MM.yyyy') AND ComplexityLevel = 'Средний' AND MounterID <> null Group By MounterID) AND MounterType = 'Стандарт'"
Здесь выбираю нет ли уже 2 договора на данный день у монтажников "Стандарт" и нет ли уже среднего договора, а так же договора "Сложный"
+
"SELECT ID,Mounter FROM tblMounters WHERE ID Not In (SELECT a.MounterID FROM tblContracts as a,tblContracts as b WHERE a.ContractDate = b.ContractDate AND a.MounterID <> b.MounterID AND a.ContractDate =FORMAT(,'dd.MM.yyyy') AND a.MounterID <> null Group by a.MounterID, b.MounterID having Count(*) = (SELECT Count(*) FROM tblContracts as c WHERE c.MounterID = a.MounterID) and Count(*) = (SELECT Count(*) FROM tblContracts as d WHERE d.MounterID = a.MounterID)) AND ID Not in (SELECT MounterID FROM tblContracts WHERE ContractDate = FORMAT(,'dd.MM.yyyy') AND ComplexityLevel = 'Сложный' AND MounterID <> null Group By MounterID) AND MounterType = 'Профи'"
Здесь проверяю нет ли двух договоров или сложного договора у профи
"Сложный" то,
"SELECT ID,Mounter FROM tblMounters WHERE ID Not In (SELECT MounterID FROM tblContracts WHERE FORMAT(ContractDate,'dd.MM.yyyy') = FORMAT(,'dd.MM.yyyy') AND MounterID <> null Group By MounterID) AND (MounterType = 'Стандарт' Or MounterType ='Профи')"
Просто проверяю нет ли у монтажников "Стандарт" и "профи" вообще договоров на данный день, если они свободны.
КАК ТЕПЕРЬ МОЖНО ВСЁ ЭТО СОЕДИНИТЬ В ОДИН ЗАПРОС? ЛИБО ПОДСКАЖИТЕ ДРУГОЙ ВАРИАНТ РЕШЕНИЯ ДАННОЙ ЗАДАЧИ.
жду вашей помощи :) http://www.sql.ru/forum/1111371/ogromennyy-zapros-na-povtor-zapisey-s-usloviyami