|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
SQL запрос с условиями24.09.2010, 12:49. Показов 7424. Ответов 80
Метки нет (Все метки)
Доброго времени суток. У меня такой вопрос: нужно составить запрос SQL так что бы присутствовали операторы IF.
Если быть точнее, ситуация такая: нужно сформировать таблицу в которой изначально есть совпадения, но по ходу формирования нужно, их исключать при этом сумировать количество, типа, если уже есть запись, в поле Count (Количество) прибавить соответствующее значение... что можете посоветовать?
0
|
|
| 24.09.2010, 12:49 | |
|
Ответы с готовыми решениями:
80
Вывод 3 столбцов с условиями после выполнения SQL запроса Динамический sql запрос с 4-мя независимыми условиями sql запрос для БазыДанных с условиями |
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 27.09.2010, 13:19 | ||||||
|
DenProx, я попробовал - у меня последний вариант отрабатывает.
Вот этот:
1
|
||||||
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
||
| 27.09.2010, 13:40 [ТС] | ||
|
Добавлено через 10 минут Mawrat, кст. в результате должно быть две детали, в Count должно быть 8 у повторной детали Добавлено через 8 минут у меня кстати почему то при нажати "Выполнить" нужно вводить три параметра...
0
|
||
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||
| 27.09.2010, 13:58 | |||
|
Сейчас таблица tblDetail содержит такие данные: detail_id block_id obosnach_name count 96 36 пкн61-н2-1-1-8 4 97 37 пкн61-н2-1-1-8 4 99 37 п2г3-2п4н переключатель 4 А должно быть так: 96 36 пкн61-н2-1-1-8 4 96 37 пкн61-н2-1-1-8 4 99 37 п2г3-2п4н переключатель 4 Т. е. деталь с detail_id = 96 должна присутствовать в блоке block_id = 36 и в блоке block_id = 37. Вот тогда запрос будет правильно всё подсчитывать. Т. е. тогда запрос для детали detail_id = 96 выдаст количество: count = 8. Почему так происходит - не знаю. Я с Access не работал - не знаю особенностей в этой системе. Наверное где-то можно задать количество параметров...--- Чтобы не запутаться с ИД деталей, можно создать отдельную таблицу - справочник деталей. В этой таблице сделать уникальный detail_id. В этом справочнике будет прописано наименование для каждой детали. А та таблица, которая сейчас назыается tblDeteil - её переделать в таблицу "отображения". Т. е. в ней уникальным ключом будет пара: (block_id, detail_id) и эта таблица уже не должна содержать наименований деталей - она только для связи между блоками и деталями. Это стандартный подход - различные объекты должны быть представлены отдльными таблицами (справочниками). Сложные связи задаются другими таблицами - таблицами "отображения". Здесь правда, можно оставить всё как есть, только надо не запутаться при этом с ИД деталей. Т. е. надо помнить, что одинаковые детали имеют всегда одинаквый ИД. И на имя детали не надо опираться.
0
|
|||
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
| 27.09.2010, 14:02 [ТС] | |
|
Mawrat, по моему все в порядке...
вот схема данных... первое поле это не ID а ключевле поле - счетчик
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 27.09.2010, 14:09 | |
|
О, раз такая схема - это неправильно...
В таблице tblDeteil уникальным ключом должна быть обязательно пара: (block_id, detail_id), а не отдельное поле detail_id.--- На самом деле, как я писал в предыдущем посте, должна быть четвёртая таблица - справочник деталей - в ней должен быть ключ detail_id. При этом справочник деталей и справочник блоков должны ссылаться на таблицу отображения - т. е. на ту таблицу, которая сейчас называется tblDeteil. В таблице tblDeteil ключом должна быть пара: (block_id, deteil_id).
0
|
|
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
| 27.09.2010, 14:11 [ТС] | |
|
Mawrat, почему не правильно? Блок може быть как отдельное изделие, и информации о стенде в детали просто не откуда будет взяться...
Здесь все просто: Стенд состоит из блоков, Блоки состоят из деталей.
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||
| 27.09.2010, 14:27 | ||
|
Справочники: tblStend, ИД: stend_id; tblBlock, ИД: block_id; tblDetail, ИД: detail_id; Таблицы отображений (функциональные т. е.): tblStBl, ИД: (stend_id, block_id); tblBlDt, ИД: (block_id, detail_id). --- Но сейчас мы имеем только один справочник в чистом виде - это tblStend. Остальные таблицы: tblBlock и tblDetail - это не справочники, а таблицы отображения или таблицы функциональной связи. Они сейчас и как справочники используются - что не правильно с точки зрения правил архитектурного строительства базы. Но в любом случае, они должны быть построены так: таблица tblBlock, ИД: (stend_id, block_id); таблица tblDetail, ИД: (block_id, detail_id). Именно в этом случае будет реализована связь: Стенды - Блоки - Детали.
0
|
||
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
| 27.09.2010, 14:31 [ТС] | |
|
Mawrat, справочники есть, просто я вырезал их из примера.... что бы проще было)
Добавлено через 23 секунды нужно сделать по тому что есть, то что мне нужно)))
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 27.09.2010, 14:45 | ||||||
|
В любом случае, касательно ключей в таблицах должно быть именно так:
tblStBl, ИД: (stend_id, block_id); tblBlDt, ИД: (block_id, detail_id). Только такой способ позволяет содержать варианты, когда разные стенды могут содержать один и тот же блок и разные блоки могут содержать одну и ту же деталь. --- А... или тут detail_id - это не тип детали, а отдельная конкретная деталь? А тип детали задаётся её названием - detail_name? Аналогично для блоков - конкретный блок задаётся block_id, а тип блока - по block_name? И стенды - аналогично? Если так, тогда всё сложнее будет... Тогда лучше будет под тип стенда, блока, детали использовать отдельные ИД. Т. е. будем тогда иметь ИД типа стенда и ИД конкретного стенда. --- Хотя, если не заморачиваться и исходить из того, что есть, тогда так. Если ИД детали - это отдельная конкретная деталь.И, аналогично, ИД блока - это конкретный блок, а его тип задаётся его наименованием. Также и для стендов. Тогда запрос будет таким:
0
|
||||||
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
| 27.09.2010, 14:51 [ТС] | |
|
ИД - это номер детали из справочника, т.е. это отдельная конкретная деталь.
Добавлено через 2 минуты и опять ошибка... ищет в моих документах td.mdb ... и не может найти)
0
|
|
|
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 27.09.2010, 14:54 | ||||||
|
Подправил:
Только одна запись с количеством 12. Так не должно быть... Я думаю это Access так стрёмно работает... либо надо что-то там настраивать.
0
|
||||||
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|||||||||||
| 28.09.2010, 13:01 [ТС] | |||||||||||
|
похоже, все таки придется вручную запихивать записи...
Добавлено через 22 часа 3 минуты в процессе составления ручного ввода, дело дошло до первого вопроса, который здесь рассматривался. Возникла ошибка, в Ацесе работает без проблем, в Delphi не хочет... пишет "Ошибка в синтаксисе предложения FROM" вот код:
0
|
|||||||||||
|
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
|
||||||
| 28.09.2010, 13:13 | ||||||
|
А у Вас DM.QSostav2.SQL чистый. Может нужно
1
|
||||||
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 28.09.2010, 13:15 | |
|
DenProx, ну вообще они не сильно-то и похожи, у вас в запросе из билдера гораздо больше полей указано в select, при этом их нет в разделе group by... а без этого никак, если вы используете агрегатные функции
0
|
|
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
||||||
| 28.09.2010, 13:27 [ТС] | ||||||
|
SAMZ, Clear действительно забыл поставить...))
Lord_Voodoo, я по разному пробывал, просто на текущий момент, было так... Clear поставил, запрос дополнил:
0
|
||||||
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 28.09.2010, 13:32 | |
|
DenProx, а оно в этой таблице точно есть? а может и конфликтуют имена тоже как вариант
0
|
|
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
||||||
| 28.09.2010, 13:49 [ТС] | ||||||
|
Lord_Voodoo, точно есть...
вот конечный вариант...
0
|
||||||
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 28.09.2010, 13:59 | |
|
DenProx, почему вы так решили, у вас такой набор полей для группировки, что сразу группировку и не увидешь
0
|
|
|
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
|
|
| 28.09.2010, 14:01 [ТС] | |
|
Lord_Voodoo, смысл группировки в том чтобы исключить повторяющиеся записи... а в полях Count и Sklad сумировать значения этих повторений... на 1-й или 2-й странице я описывал, эту ситуацию...
0
|
|
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 28.09.2010, 14:11 | |
|
DenProx, вы знаете, вам аксесс не даст использовать агрегатные функции без группировки... и для исключения повторяющихся записей всегда был distinct... и чем больше данных вы укажите в выборке, тем мельче будут группы, как вы уже догадались...
0
|
|
| 28.09.2010, 14:11 | |
|
SQL запрос с несколькими не обязательными условиями
Запрос с условиями Запрос с условиями Запрос с противоположными условиями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|