Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.06.2011, 17:00
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию Выборка из нескольких таблиц

Есть три таблицы: Заказ , производитель , неисправность
Код HTML:
ТТабица Заказ (кей1 и кей2 из 2-х других таблиц) Кей1 | Кей2 1 | 1 2 | 3 1 | 1 1 | 2 Таблица Производитель Кей1 | Производитель 1 | нокиа 2 | самсунг Таблица Неисправность Кей2 | Неисправность 1 | не включается 2 | не заряжается 3 | перезагружается


Необходимо сделать запрос, что бы он выводил какие неисправности и сколько раз встречались у одного производителя
Пример для Nokia
Не включается | 2 раза
Не заряжается | 1 раз

Последний раз редактировалось Вадим1985, 14.06.2011 в 17:06.
Ответить с цитированием
  #2  
Старый 14.06.2011, 17:08
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если не наврал, то где-то так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Key2)
from Заказ 
 inner join Производитель on Производитель.Кей1=Заказ.Кей1
 inner join Неисправность on Неисправность.Кей2=Заказ.Кей2
group by Производитель.Производитель, Неисправность.Неисправность
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.06.2011, 17:32
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Вадим1985
Есть три таблицы: Заказ , производитель , неисправность
Код HTML:
ТТабица Заказ (кей1 и кей2 из 2-х других таблиц) Аппарат(берется из кей1) | Проблема (из Кей2) 1 | 1 2 | 3 1 | 1 1 | 2 Таблица Производитель Кей1 | Производитель 1 | нокиа 2 | самсунг Таблица Неисправность Кей2 | Неисправность 1 | не включается 2 | не заряжается 3 | перезагружается


Необходимо сделать запрос, что бы он выводил какие неисправности и сколько раз встречались у одного производителя
Пример для Nokia
Не включается | 2 раза
Не заряжается | 1 раз

Извините что-то я совсем запутался. Немножко подправил 1 таблицу. Не могли бы вы вот по этим данным запрос переделать.
Ответить с цитированием
  #4  
Старый 14.06.2011, 17:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если я правильно понял, то поля в таблице Заказ у вас называются теперь Аппарат и Проблема вместо Кей1 и Кей2 соответственно. Тогда так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема)
from Заказ 
 inner join Производитель on Производитель.Кей1=Заказ.Аппарат
 inner join Неисправность on Неисправность.Кей2=Заказ.Проблема
group by Производитель.Производитель, Неисправность.Неисправность
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 14.06.2011, 18:08
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию

Пишет вот что "type mismatch in expression"
Наверное дело в том что поля кей 1 и кей 2 имеют тип автоинкремент (счетчики). А поля АППАРАТ и ПРОБЛЕМА тип альфа.
Вот пример запроса который выводит общее кол-во неисправностей, и кол-во повторяющихся неисправностей из таблицы заказ.

Код:
select A.Неисправность, count(B.Проблема)
from Неисправность A, Заказ B
where A.Кей2=CAST(B.Проблема as NUMERIC)
group by B.Проблема,A.неисправность
Пример выпонения
Не включается | 2
Не заряжается | 1
Перезагружается | 1

Может сделать как-нибудь по аналогии с этим примером. только как добавить еще одно условие. Например что бы он выбирал только аппараты NOkia

Последний раз редактировалось Вадим1985, 14.06.2011 в 18:16.
Ответить с цитированием
  #6  
Старый 14.06.2011, 18:30
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А с чего это вдруг у вас разные типы полей? Счетчик это по сути число. В таблицах Производитель и Неисправность эти поля тоже должны быть числом. И приведение типа через Cast это уже мазохизм какой-то. Сначала создали проблему а теперь с ней боретесь. Приведите структуры таблиц к нормальному виду.
Но если это очень сложно, (хотя я вам настоятельно советую привести все ключи к единому виду) тогда так попробуйте:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема)
from Заказ 
 inner join Производитель on Cast(Производитель.Кей1 as NUMERIC)=Заказ.Аппарат
 inner join Неисправность on Cast(Неисправность.Кей2 as NUMERIC)=Заказ.Проблема
group by Производитель.Производитель, Неисправность.Неисправность
а для ограничения по производителю так можно:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема)
from Заказ 
 inner join Производитель on Cast(Производитель.Кей1 as NUMERIC)=Заказ.Аппарат
 inner join Неисправность on Cast(Неисправность.Кей2 as NUMERIC)=Заказ.Проблема
group by Производитель.Производитель, Неисправность.Неисправность
where Производитель.Производитель = 'NOkia'
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 14.06.2011 в 18:39.
Ответить с цитированием
  #7  
Старый 14.06.2011, 19:07
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию

Не хочет работать

Invalid use of keyword
Token : where
Line Number : 6
Ответить с цитированием
  #8  
Старый 14.06.2011, 19:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Упс. Поменять местами строки надо:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема)
from Заказ 
 inner join Производитель on Cast(Производитель.Кей1 as NUMERIC)=Заказ.Аппарат
 inner join Неисправность on Cast(Неисправность.Кей2 as NUMERIC)=Заказ.Проблема
where Производитель.Производитель = 'NOkia'
group by Производитель.Производитель, Неисправность.Неисправность
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 14.06.2011, 19:34
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию

Да уже поменял. Опять пишет type mismatch in expression.
Дело в том что когда создавалась таблица заказ, полям был присвоен тип Alpha и теперь я его поменять не могу(когда меняю тип на интегер и запускаю программу в делфи то сразу выскакивает ошибка, что мол у этого поля должен быть тип стринг а тебя интегер.)

Но почему то вот тот запрос который я привел в работает без ошибок
Ответить с цитированием
  #10  
Старый 14.06.2011, 19:39
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Не раб, потому-что я не так понял, какие поля у вас альфа. У вас на самом деле альфа в заказе, а не в Производителе и Неисправности. Тогда так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема)
from Заказ 
 inner join Производитель on Производитель.Кей1=Cast(Заказ.Аппарат as NUMERIC)
 inner join Неисправность on Неисправность.Кей2=Cast(Заказ.Проблема as NUMERIC)
where Производитель.Производитель = 'NOkia'
group by Производитель.Производитель, Неисправность.Неисправность
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 14.06.2011, 23:23
Вадим1985 Вадим1985 вне форума
Прохожий
 
Регистрация: 15.05.2011
Сообщения: 7
Репутация: 10
По умолчанию

Почемуто возвращает ноль.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter