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