Страница 1 из 1

запрос на выборку с подчетов строк по FK

Добавлено: 10 фев 2006, 17:26
Wontar
Вообщем есть таблица "заказов", "пакетов", и "размеров".
заказы 1 - * пакеты
заказы 1 - * размеры.
У заказов PK = Code. У пакетов и размеров FK (ordercode = orders.Code)

Нужно как-то вытащить данные по заказу + кол-во пакетов в нем и суммы кол-ва единиц размеров.
Вообщем я попробовал собрать но он пишет что неправильный Group By.

Код: Выделить всё

SELECT
    ORDERS.CODE,
    ORDERS.DESCRIPTION,
    ORDERS.MODEL,
    ORDERS.SEASON,
    ORDERS.PRODSTART,
    ORDERS.PRODEND,
    ORDERS.CDATETIME,
    COUNT(BUNDLES.ID),
    SUM(SIZEENTRIES.quantity)
FROM
    ORDERS,BUNDLES,SIZEENTRIES
Where
  (ORDERS.CODE = :code)
  AND (BUNDLES.ORDERCODE = ORDERS.CODE)
  AND (SIZEENTRIES.ORDERCODE = ORDERS.CODE)
GROUP BY
  ORDERS.CODE
Подскажите как подправить.

Сенкс.

Добавлено: 11 фев 2006, 10:55
Gage
Поля
ORDERS.DESCRIPTION,
ORDERS.MODEL,
ORDERS.SEASON,
ORDERS.PRODSTART,
ORDERS.PRODEND,
ORDERS.CDATETIME
либо должны быть указаны в GROUP BY,
либо к каждому из них нужно применить одну из функций - sum, max, min, avg

Добавлено: 11 фев 2006, 17:03
Wontar
Все бы ничего, но вот только такой запрос ничего не восзвращает, когда должен был бы.

Код: Выделить всё

SELECT
    ORDERS.CODE,
    ORDERS.DESCRIPTION,
    ORDERS.MODEL,
    ORDERS.SEASON,
    ORDERS.PRODSTART,
    ORDERS.PRODEND,
    ORDERS.CDATETIME,
    COUNT(BUNDLES.ID),
    SUM(SIZEENTRIES.quantity)
FROM
    ORDERS,BUNDLES,SIZEENTRIES
Where
  (ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = :CODE)  AND (SIZEENTRIES.ORDERCODE = :CODE)
GROUP BY
  ORDERS.CODE,
  ORDERS.DESCRIPTION,
  ORDERS.MODEL,
  ORDERS.SEASON,
  ORDERS.PRODSTART,
  ORDERS.PRODEND,
  ORDERS.CDATETIME
Не подскажете в чем проблемка ?

Добавлено: 12 фев 2006, 20:48
Gage
Where
(ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = :CODE) AND (SIZEENTRIES.ORDERCODE = :CODE)
Параметр :CODE - это одно и тоже чило для всех равенств?

Добавлено: 12 фев 2006, 22:06
Wontar
Да, это одно и тоже. По идее должен указывать на код заказа.
Я также пробовал конструкцию

Код: Выделить всё

Where 
(ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = ORDERS.CODE) AND (SIZEENTRIES.ORDERCODE = ORDERS.CODE)
но она тоже ничего не дает.

Добавлено: 13 фев 2006, 01:19
kdv
начни без group by и агрегата. с where, с константой вместо параметра. Возвращает? посмотри на данные, попробуй сгруппировать. и т.д. Это твои данные, поэтому тебе лучше знать, "возвращает или нет".

Добавлено: 13 фев 2006, 09:18
Wontar
Без агрегатов и group by работает хорошо.
Поэтому и странно.