Мне нужно представить данные из базы данных 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.
Есть 0 или более СКИДОК для данной SHIFTDATA
Мне нужен эквивалент этого оператора, хотя я знаю, что не могу комбинировать агрегатные выражения с «неагрегатными выражениями» в операторе 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
JTable
? - person prasad_   schedule 04.12.201893.48
дляTOTAL_PAIDOUTS
? - person prasad_   schedule 04.12.2018SUM(O.AMOUNT)
? - person prasad_   schedule 04.12.2018