Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

для начала - заняться нормализацией данных, а потом пытатться комплекты по комнатам собирать


Наверх

Титульная страница Поиск, карта сайта Написать письмо