|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Выборка из нескольких таблиц
Есть три таблицы: Заказ , производитель , неисправность
Код HTML:
Необходимо сделать запрос, что бы он выводил какие неисправности и сколько раз встречались у одного производителя Пример для Nokia Не включается | 2 раза Не заряжается | 1 раз Последний раз редактировалось Вадим1985, 14.06.2011 в 17:06. |
#2
|
||||
|
||||
Если не наврал, то где-то так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Key2) from Заказ inner join Производитель on Производитель.Кей1=Заказ.Кей1 inner join Неисправность on Неисправность.Кей2=Заказ.Кей2 group by Производитель.Производитель, Неисправность.Неисправность Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Цитата:
Извините что-то я совсем запутался. Немножко подправил 1 таблицу. Не могли бы вы вот по этим данным запрос переделать. |
#4
|
||||
|
||||
Если я правильно понял, то поля в таблице Заказ у вас называются теперь Аппарат и Проблема вместо Кей1 и Кей2 соответственно. Тогда так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема) from Заказ inner join Производитель on Производитель.Кей1=Заказ.Аппарат inner join Неисправность on Неисправность.Кей2=Заказ.Проблема group by Производитель.Производитель, Неисправность.Неисправность Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Пишет вот что "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
|
||||
|
||||
А с чего это вдруг у вас разные типы полей? Счетчик это по сути число. В таблицах Производитель и Неисправность эти поля тоже должны быть числом. И приведение типа через 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
|
|||
|
|||
Не хочет работать
Invalid use of keyword Token : where Line Number : 6 |
#8
|
||||
|
||||
Упс. Поменять местами строки надо:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема) from Заказ inner join Производитель on Cast(Производитель.Кей1 as NUMERIC)=Заказ.Аппарат inner join Неисправность on Cast(Неисправность.Кей2 as NUMERIC)=Заказ.Проблема where Производитель.Производитель = 'NOkia' group by Производитель.Производитель, Неисправность.Неисправность Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
Да уже поменял. Опять пишет type mismatch in expression.
Дело в том что когда создавалась таблица заказ, полям был присвоен тип Alpha и теперь я его поменять не могу(когда меняю тип на интегер и запускаю программу в делфи то сразу выскакивает ошибка, что мол у этого поля должен быть тип стринг а тебя интегер.) Но почему то вот тот запрос который я привел в работает без ошибок |
#10
|
||||
|
||||
Не раб, потому-что я не так понял, какие поля у вас альфа. У вас на самом деле альфа в заказе, а не в Производителе и Неисправности. Тогда так:
Код:
select Производитель.Производитель, Неисправность.Неисправность, Count(Проблема) from Заказ inner join Производитель on Производитель.Кей1=Cast(Заказ.Аппарат as NUMERIC) inner join Неисправность on Неисправность.Кей2=Cast(Заказ.Проблема as NUMERIC) where Производитель.Производитель = 'NOkia' group by Производитель.Производитель, Неисправность.Неисправность Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
Почемуто возвращает ноль.
|