![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос
charoey_mag © (2008-11-21 13:36:00)Ни как не могу сообразить, можно ли на SQL написать запрос к талице. В таблице содержится инвентаризационный список выч. техники вида:
UnikID - InvNom - Type - Name - Room - ......
1 123001 СисБл Celeron - 1 - ....
2 123001 Мон LCD - 1 - ....
.....
Если И системный блок И монитор имеют один и тот же инвентарник то это Комплект, если нет то нет.
И вопрос как найти все комплекты/не комплекты и как найти Собранные комплекты, если и Системный блок и Монитор находятся в одной комнате?
charoey_mag (2008-11-25 14:00:00) [1]
> stas © (24.11.08 16:59) [18]
Спасибо!, дальше буду сам разбираться.
stas (2008-11-24 16:59:00) [2]Точнее так
SELECT INVNOM,IIF( COUNT (*)>1, 'Комплект' ,' FIRST(ComEq.Name))
FROM ComEq
GROUP BY INVNOM
stas (2008-11-24 16:58:00) [3]charodey_mag (22.11.08 12:58) [13]
Это
+к моему предыдущему посту
SELECT INVNOM,IIF( COUNT (*)>1, 'Комплект' ,' ComEq.Name')
FROM ComEq
GROUP BY INVNOM
Кщд (2008-11-24 12:17:00) [4]order by InvNom, Room
charodey_mag (2008-11-22 14:17:00) [5]
> SELECT a.InvNom FROM table1 aJOIN table1 b ON a.InvNom=b.
> InvNom AND a.[Type]='СисБл' AND b.[Type]='Мон'
Я об этом с самого начала подумал, но при этом и мон. и СБ оказываются в одной стороке, а это неподходит.
Но все равно Спасибо.
palva (2008-11-22 13:32:00) [6]
> UnikID - InvNom - Type - Name - Room - ......
> 1 123001 СисБл Celeron - 1 - ....
> 2 123001 Мон LCD - 1 - ....
Пишу на коленке:
SELECT a.InvNom FROM table1 a
JOIN table1 b ON a.InvNom=b.InvNom AND a.[Type]='СисБл' AND b.[Type]='Мон'
Должно выдать InvNom для всех комплектов. Комнату можно приделать в том же духе.
charodey_mag (2008-11-22 12:58:00) [7]
> Если да и данных в таблице сравнительно немного, то не заморачивайся
> с сиквелом - просто засоси таблицу целиком в массив на сторону
> клиента, и там уже безо всяких сиквелов гуляй по массиву
> как тебе вздумается: сортируй, группируй, фильтруй хорошо
> знакомыми тебе языковыми и иными средствами Делфи.
База полностью в Access с использованием рабочей группы. А Basic я не знаю, и можно ли там это.
> ACCESS тогда вместо CASE используй IIF.
SELECT IIF( COUNT (*)>1, 'Комплект' ,' ComEq.Name')
FROM ComEq;
Это возвращает всегда одну запись 'Комплект', и не важно сколько повторов
Спасибо, за отклик и помощь
PS. Это не касается Anatoly Podgoretsky ©
stas (2008-11-21 16:41:00) [8]ACCESS тогда вместо CASE используй IIF.
Сергей М. (2008-11-21 15:21:00) [9]
> charoey_mag
Тебе для отчетов это надо ?
Если да и данных в таблице сравнительно немного, то не заморачивайся с сиквелом - просто засоси таблицу целиком в массив на сторону клиента, и там уже безо всяких сиквелов гуляй по массиву как тебе вздумается: сортируй, группируй, фильтруй хорошо знакомыми тебе языковыми и иными средствами Делфи.
Anatoly Podgoretsky (2008-11-21 15:11:00) [10]> charoey_mag (21.11.2008 15:03:09) [9]
Уговорил.
Просто брось программировать.
charoey_mag (2008-11-21 15:03:00) [11]
> Тебе решение правильное или научное?
Решение - само слово подразумевает исполнение поставленной задачи, какое оно будет, я не думаю что это имеет критическое значание, к конце концов если решений много то можно выбрать оптимальное, так?
Anatoly Podgoretsky (2008-11-21 14:59:00) [12]> charoey_mag (21.11.2008 13:36:00) [0]
Тебе решение правильное или научное?
charoey_mag (2008-11-21 14:56:00) [13]
> Начнем с сервера что за СУБД ?
> С таким подходом базами лучше не заниматься, ИМХО.
> PS. База Access если это имеет значение
> И второе я не имею к базе доступа на изменение, только на
> запросы.
Я тоже могу сколь угодно много рассказывать о том какой не хороший человек "архитектурил" эту базу, однако необходимость конструктивного решения вопроса это не снимает...
stas (2008-11-21 14:44:00) [14]Начнем с сервера что за СУБД ?
например так:
Select INVNOM, CASE WHEN COUNT (*)>1 THEN 'Комплект' ELSE MAX(NAME) END
GROUP BY INVNOM
Sergey13 (2008-11-21 14:30:00) [15]> [4] charoey_mag (21.11.08 14:18)
> Пока комплектом считается только Монитор и СБ
С таким подходом базами лучше не заниматься, ИМХО.
Скорее всего твои запросы пишутся по формуле
Select условие_группировки,count(*)
where table_name
group by условие_группировки
having count(*)> по смыслу
и возможно дорабатываются напильником
charoey_mag (2008-11-21 14:18:00) [16]
> И это все одним запросом нужно реализовать ?
Комплект отдельно, Не комплект отдельно, и Собранный комплект наверное из запроса Комплект.
> А если комплект - это системник, моник, сканер, принтер
> и модем
Пока комплектом считается только Монитор и СБ(кл+м) входят в состав СБ, остальное отдельно но возможно понадобится и такой запрос. Его я думаю будет легче собрать.
> для начала - заняться нормализацией данных
Что тут является не нормализованным? И второе я не имею к базе доступа на изменение, только на запросы.
PS. База Access если это имеет значение
Sergey13 (2008-11-21 14:10:00) [17]> [0] charoey_mag (21.11.08 13:36)
> Если И системный блок И монитор имеют один и тот же инвентарник
> то это Комплект, если нет то нет.
А если комплект - это системник, моник, сканер, принтер и модем?
Ты по моему не запрос хочешь составить, а ищешь аналог "По щучьему веленью, по моему хотенью", при этом на руках имея одну ненормализованную таблицу.
Сергей М. (2008-11-21 14:02:00) [18]И это все однимзапросом нужно реализовать ?
Правильный$Вася (2008-11-21 13:50:00) [19]для начала - заняться нормализацией данных, а потом пытатться комплекты по комнатам собирать