Мне нужно представить данные из базы данных Derby в JTable, но два столбца представляют собой совокупные суммы из двух связанных таблиц «один ко многим».Вот пример схемы:
SHIFTDATA:
ID
DATE
SHIFT
FOOD_COST
OFFICE_SUPPLIES
REP_MAINT
NET_SALES
SALES_TAX
OTHERPAIDOUTS:
ID
SHIFTDATA_ID
LABEL
AMOUNT
DISCOUNTS
ID
SHIFTDATA_ID
DISCOUNT_NAME
AMOUNT
Существует 0 или более OTHERPAIDOUTS для данного SHIFTDATA
Для данного SHIFTDATA * 06 или более СКИДОК
Мне нужен эквивалентэтого оператора, хотя я знаю, что не могу объединить агрегатные выражения с «неагрегированными выражениями» в операторе SELECT:
SELECT (S.FOOD_COST + S.OFFICE_SUPPLIES + S.REP_MAINT + SUM(O.AMOUNT)) AS TOTAL_PAIDOUTS,
SUM(D.AMOUNT) AS TOTAL_DISCOUNT,
S.NET_SALES,
S.SALES_TAX
FROM SHIFTDATA S, OTHERPAIDOUTS O, DISCOUNTS D WHERE O.SHIFTDATA_ID=S.ID AND D.SHIFTDATA_ID=S.ID
Я вижу в других потоках, где добавление предложения GROUP BY исправляет эти ситуации,но я предполагаю, что добавление во второй совокупности из третьей таблицы выбивает меня из колеи.Я попытался использовать GROUP BY S.NET_SALES, S.SALES_TAX и добавить AND S.ID = 278 в предложение WHERE, чтобы получить известный результат, и TOTAL_PAIDOUTS является правильным (в OTHERPAIDOUTS есть 3 связанных записи), но возвращаемое значение TOTAL_DISCOUNTS:В 3 раза больше, чем должно быть.
Излишне говорить, что я не программист SQL!Надеюсь, вы поняли суть того, что я после.Я попробовал вложенные операторы SELECT, но просто испортил это.Это приложение все еще находится в разработке, включая структуру базы данных, поэтому, если другая структура БД упростит ситуацию, это может быть вариантом.Или, если есть другой способ программно построить табличную модель, я тоже открыт для этого.Заранее спасибо!
======== Редактировать =============
Чтобы проверить значения из известной записи,Я запрашиваю с определенным SHIFTDATA.ID.Ниже приведены примеры записей таблицы:
SHIFTDATA:
ID |FOOD_COST |OFFICE_SU&|REP_MAINT |NET_SALES |SALES_TAX
------------------------------------------------------
278 |0.00 |5.00 |10.00 |3898.78 |319.79
OTHERPAIDOUTS:
ID |SHIFTDATA_&|LABEL |AMOUNT
---------------------------------------------------------------------------
37 |278 |FOOD COST FUEL |52.00
38 |278 |MAINT FUEL |5.00
39 |278 |EMPLOYEE SHOES |21.48
DISCOUNTS:
ID |ITEM_NAME |SHIFTDATA_&|AMOUNT
---------------------------------------------------------------------------
219 |Misc Discounts |278 |15.91
Что я ожидаю увидеть для этой строки SHIFTDATA в JTable:
TOTAL_PAIDOUTS | TOTAL_DISCOUNT |NET_SALES |SALES_TAX
------------------------------------------------------
93.48 |15.91 |3898.78 |319.79
Лучшее, что я могу получить, это добавить предложение GROUP BY, но группируя по полям из SHIFTDATA я получаю:
TOTAL_PAIDOUTS | TOTAL_DISCOUNT |NET_SALES |SALES_TAX
------------------------------------------------------
93.48 |47.73 |3898.78 |319.79