Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Открыть новую тему     Написать ответ в эту тему

SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kapiton1

Цитата:
SELECT name, prodvers FROM comp WHERE podr='marketing' AND prodname='Total Commander'

Во первых где у тебя AND prodname='Total Commander' это не нужно
в дерективе select используй case для Total Commander
Если не понял нарисуй какой результат хочешь видеть
|столбец1|столбец2|столбец3|столбец4|
|что в нем|что в нем|что в нем|что в нем|
напишу тебе sql

Всего записей: 636 | Зарегистр. 03-03-2009 | Отправлено: 18:00 24-09-2009 | Исправлено: SIgor33, 18:01 24-09-2009
kapiton1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
Первый столбец: все компы из отдела маркетинга.
Второй столбец: напротив каждого компа или версия Тотала (если он установлен на этом компе), или пустое поле (если Тотал не установлен).

Всего записей: 138 | Зарегистр. 20-07-2005 | Отправлено: 19:36 24-09-2009
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kapiton1
select
Otdel,
case prodname when 'Total Commander' then N_total else '' end as Total_N
from
comp
where
otdel='отдел 1'
где поле N_total поле в которм номера твоих тоталов

Всего записей: 636 | Зарегистр. 03-03-2009 | Отправлено: 09:07 25-09-2009 | Исправлено: SIgor33, 09:09 25-09-2009
kapiton1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
Спасибо, попробую.

Всего записей: 138 | Зарегистр. 20-07-2005 | Отправлено: 11:37 25-09-2009
Irbis3003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите кто знает - есть ли в SQL приведение типов.  
Дано: таблицы PARADOX (прога на Delphi7), когда делаю запрос выдергиваю названия улиц по их индексу, но проблема в том, что в одной таблице индекс имеет тип Number, а в другой - Alpha. Менять сами таблицы - не вариант (они лежат на серваке на другом компе).  
select  
":aistmp:PDL.db".FIO,
":aisbasa:ULICA.db".NAME,
 
FROM
 ":aistmp:PDL.db",  
":aisbasa:ULICA.db"
where  
 ":aisbasa:ULICA.db".Codeofstreet = ":aistmp:PDL.db".Ulc; /*Вот эти две записи не контачат между собой, ибо первая - number, вторая - alpha

Всего записей: 9 | Зарегистр. 17-05-2009 | Отправлено: 11:45 03-10-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003
Смотри Cast и Convert функции
http://www.ayton.id.au/gary/it/Delphi/C_sql01.htm
http://www.thedbcommunity.com/index.php?option=com_content&task=view&id=106&Itemid=46

Всего записей: 3906 | Зарегистр. 31-03-2002 | Отправлено: 19:36 03-10-2009 | Исправлено: dneprcomp, 20:05 03-10-2009
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003
А при чем тут индекс когда нужны типы поле
А вот про тип alpha я неслышал в парадоксе такого нет
(строки номера дата текст блоб и т.д есть)

Всего записей: 636 | Зарегистр. 03-03-2009 | Отправлено: 10:57 06-10-2009
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
Индекс имелся ввиду почтовый индекс.

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:47 06-10-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33

Цитата:
CHARACTER(length) Alpha-numeric type values. Specify length of column capacity, in bytes. Length must be between 1 and 254.
VARCHAR(length)    Alpha-numeric type values. Specify length of column capacity, in bytes. Length must be between 1 and 254. In local SQL, VARCHAR is functionally the same as CHAR.

Irbis3003
where    
 Cast(":aisbasa:ULICA.db".Codeofstreet as varchar) = ":aistmp:PDL.db".Ulc;

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:11 06-10-2009
Irbis3003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть запрос, примерно такой:
select  
":aistmp:PDL.db".FIO,
":aistmp:F_VPL.db".SUMM,
max(cast('01'+'.'+":aistmp:F_VPL.db".MES+'.'+":aistmp:F_VPL.db".GOD as date))  a
FROM
":aistmp:PDL.db",
":aistmp:F_VPL.db",
":aisbasa:KARNUG.db"
where  
":aistmp:PDL.db".NPD = ":aistmp:F_VPL.db".NPD
and ":aisbasa:KARNUG.db".PASPNP = ":aistmp:PDL.db".PNM
and ":aisbasa:KARNUG.db".OTDEL = '3'  
group by
":aistmp:PDL.db".FIO,
":aistmp:F_VPL.db".SUMM
order by FIO; (таблицы PARADOX)
 
должен показать сумму, которая последней была начислена человеку. У всех людей разные даты последнего начисления. По идее столбец а (в которое собирается дата последнего начисления) должно показывать одну максимально последнюю дату для одного человека. Но показывает записей 10.
Если же убрать из запроса сумму - дата становится единственной (то есть как положено: один человек, одна дата). В чем-то ошибка? Почему получается избыточность при таком запросе?

Всего записей: 9 | Зарегистр. 17-05-2009 | Отправлено: 16:39 08-10-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003
Потому что в связанных таблицах больше одного рекорда для данного человека.
Связь one-to-many
Попробуй SELECT DISTINCT или SELECT DISTINCTROW

Всего записей: 3906 | Зарегистр. 31-03-2002 | Отправлено: 00:53 09-10-2009 | Исправлено: dneprcomp, 00:58 09-10-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003
1  
select fio,sum,date from table t1 where date=(select max(date) from table t2 where t2.fio=t1.fio)
2
select * from table t1 join (
select max(date) as md from table  
gropu by fio) t2 on t1.fio=t2.fio and t1.date=t2.md
3
SELECT *
FROM table t1
WHERE NOT EXISTS(
  SELECT *  
  FROM table t2
  WHERE t2.date > t1.date
AND t2.fio = t1.fio
надеюсь идея понятна ?

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:25 09-10-2009 | Исправлено: greenpc, 12:03 09-10-2009
Irbis3003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я решил немного облегчить задачу, и оставить этот запрос. И написать еще один))
Для этого скажите пожалуйста, можно ли результат вышеупомянутого мною запроса запихать в динамически-создаваемую таблицу? Причем у этой таблицы нужно каким-то образом задать адрес сохранения (чтобы после вывода запроса благополучно таблицу убить=) Из этой таблицы сделать еще одну выборку (уже абсолютно безхитростную), и результат вывести в QuickRep. (Напомню еще раз, что юзаю Delphi7, PARADOX)

Всего записей: 9 | Зарегистр. 17-05-2009 | Отправлено: 14:09 09-10-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003

Цитата:
можно ли результат вышеупомянутого мною запроса запихать в динамически-создаваемую таблицу
да пожалуйста insert into restable (если надо поля) select ....

Цитата:
задать адрес сохранения  
т.е. вы не умеете создавать таблицы?  

Цитата:
Из этой таблицы сделать еще одну выборку  

а смысл таких извращений?
IMHO почитайте лучше книги по sql типа Губера "понимание sql" и большенство вопросов отпадет

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:23 09-10-2009 | Исправлено: greenpc, 15:29 09-10-2009
Irbis3003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понимаете, сейчас программный продукт держится на заглушках, и сделав эту последнюю выборку он уже будет похож на работоспособный. А доведение до ума - это уже дело второе, на которое можно посветить больше времени и внимания. Просто сейчас моего ума хватает на подобный алгоритм - двойной запрос :-[  
 
Так все-таки: если я создаю таблицу (самое простое create table mytable (first_pole character);), то как запихать эту таблицу в нужный мне альяс? (то есть альяс уже объявлен, например ":Alias1:")?
 
Добавлено:
Все, почти разобрался))

Всего записей: 9 | Зарегистр. 17-05-2009 | Отправлено: 17:13 09-10-2009
Irbis3003

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, кто юзает Delphi и PARADOX, помогите. Если написать в Query написать запрос типа выбрать из таблицы и все такое (select * from ":alias:Table.db"), то Query.Actie:=true без проблем ставится. Но если в запрос написать Delete from ":alias:Table.db", то сразу пишет ошибку error creating cursor handle. В чем-то ошибка?
 
Добавлено:
разобрался))))

Всего записей: 9 | Зарегистр. 17-05-2009 | Отправлено: 19:23 12-10-2009
KurkSS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Общая помощь по созданию запросов.... лично я из своего опыта преподавания этого языка могу сказать следующее.....
Подробнее...

Всего записей: 73 | Зарегистр. 22-05-2008 | Отправлено: 23:10 12-10-2009 | Исправлено: ShIvADeSt, 07:11 13-10-2009
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Irbis3003
Для не-Select запросов используй метод ExecSQL. Кстати, компоненты доступа ты так и не указал.

----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 07:10 13-10-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KurkSS
офф
хотел помолчать но не получается лично я бы ни зачто не пошел к вам учится
хотя бы одна эта фраза

Цитата:
ещо есть джоины и прочее... но вообщемто это экзотика

чего стоит... и говорит о вашей проф пригодности
чтобы не вдаваться в спор по этой теме предлагаю почитать по этому хотя бы это _http://www.sql.ru/users/sergcat/1.htm

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:06 13-10-2009
KurkSS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenp
 
Вопервых, большое вам спасибо, что прочитали моё сообщение, не смотря на то, что длинное.Также сразу видно, что прочитали внимательно.... Знаете ... может и есть экзотические, но популярные ситуации
в экзотических базах где есть смысл, и я бы сам использовал часто джоины.... но....
ЗЫ:ситуация похожа как один человек мне доказывал что если есть awk то нужно забыть про
sed
 

Цитата:
чего стоит... и говорит о вашей проф пригодности  
чтобы не вдаваться в спор по этой теме предлагаю почитать по этому хотя бы это _http://www.sql.ru/users/sergcat/1.htm

 
Взаимно прочитал и разобрал внимательно ваш пример.
Именно по вашему примеру? пусто значение вкачестве ключа - это уже экзотика... везде пишут, что очень не рекомендуеться так делать...
 
но что будет если для указанного вами примера в каждой таблице-справочнике (таблицы детали1 и детали 2)сделать заглушки.... строки   ключ=НУЛ значение(name)=НУЛ... это для того случая когда при связывании по двум айди(полям) одно задано а другое нет
 
и сразу пример теряет доказательность, что без джоина никуда....
 
я без юмора, благодарен что внимательно прочитали моё сообщение

Всего записей: 73 | Зарегистр. 22-05-2008 | Отправлено: 19:24 13-10-2009 | Исправлено: KurkSS, 19:32 13-10-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru