Вот мой запрос (jpql-eclipseLInk) -
"SELECT NEW com.nrbwlko.officeprojectmaven1.dao.ProjectProgressDao(c.projectMemberFk.projectMember,"
+ "COUNT(c),"
+ "CASE (c.materialDetailFk.materialType.materialType) WHEN 'plate' "
+ "THEN SUM(c.componentLength*c.componentWidth*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty*c.projectMemberFk.projectUnitIdFk.unitQty)/1000000 "
+ "ELSE SUM(c.componentLength*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty*c.projectMemberFk.projectUnitIdFk.unitQty)/1000 END, "
+ "CASE (c.materialDetailFk.materialType.materialType) WHEN 'plate' "
+ "THEN SUM(c.componentLength*c.componentWidth*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty)/1000000 "
+ "ELSE SUM(c.componentLength*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty)/1000 END, "
+ "CASE (c.materialDetailFk.materialType.materialType) WHEN 'plate' "
+ "THEN SUM(c.componentLength*c.componentWidth*c.materialDetailFk.unitWeight*c.projectMemberFk.fabricatedQty)/1000000 "
+ "ELSE SUM(c.componentLength*c.materialDetailFk.unitWeight*c.projectMemberFk.fabricatedQty)/1000 END, "
+ "CASE (c.materialDetailFk.materialType.materialType) WHEN 'plate' "
+ "THEN SUM(c.componentLength*c.componentWidth*c.materialDetailFk.unitWeight)/1000000 "
+ "ELSE SUM(c.componentLength*c.materialDetailFk.unitWeight)/1000 END) "
+ "FROM CuttingList c "
+ "WHERE c.projectMemberFk.projectUnitIdFk.projectId.projectId = :id "
+ "GROUP BY c.projectMemberFk.projectMember"
Первая сумма - это общая сумма (очевидно, состоящая из групп по элементам) --- которая не равна сумме отдельной строки. Когда я группирую по отдельному идентификатору строки (c .id) Итого составляет 28193 (это правильное значение, я проверил это вручную). Но когда я группирую его по значению члена, это 28103.
Я пробовал различные комбинации и если каждая строка не индивидуальна, итоговое значение всегда меньше фактического значения. Это часть моего android бэкэнда приложения, вся работа выполнена за исключением этого несоответствия данных, которое делает мои последние 6 месяцев бесполезными. Мне отчаянно нужна помощь.
Еще одна информация, которой я хотел бы поделиться, что если я сгруппирую ее по материалу (запрос представлен ниже), то итоговое значение снова будет правильным, например,
Вот еще один запрос из той же таблицы. Общий вес материала, но на этот раз он сгруппирован по материалам, а не по элементу
"SELECT NEW com.nrbwlko.officeprojectmaven1.dao.MaterialSummeryByProjectDao(c.materialDetailFk.materialName,COUNT(c),"
+ "CASE (c.materialDetailFk.materialType.materialType) WHEN 'plate' "
+ "THEN SUM(c.componentLength*c.componentWidth*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty*c.projectMemberFk.projectUnitIdFk.unitQty)/1000000 "
+ "ELSE SUM(c.componentLength*c.materialDetailFk.unitWeight*c.projectMemberFk.memberQty*c.projectMemberFk.projectUnitIdFk.unitQty)/1000 END) "
+ "FROM CuttingList c "
+ "WHERE c.projectMemberFk.projectUnitIdFk.projectId.projectId = :id "
+ "GROUP BY c.materialDetailFk.materialName"
, что дает мне материал, сгруппированный по типу 4, и общее количество составляет 28193 (правильное значение)
(Количество (c) ) в обоих случаях это правильно, что составляет 6 номеров)
вот результат, когда я сгруппирован по материалу - (Итого правильно) Я могу предоставить больше информации, если требуется.