Критерии SQL / Hibernate - группировка по проблеме

1

У меня возникли проблемы с созданием соответствующего SQL-запроса. Любая помощь будет высоко ценится!

Некоторые предпосылки:

У меня есть следующие объекты

Equipment
id
nickname
owner_indicator
{...}

EquipmentGroup_Equipment
equipment_id
equipment_group_id

EquipmentGroup
id
name
description

Мне нужно выполнить запрос на спящий режим SQL/JPA, который возвращает меня:

EquipmentGroup.name, EquipmentGroup.description, Equipment.owner_indicator

И это будет сгруппировано EquipmentGroup.id, поэтому, если у меня будет 10 оборудования внутри группы, оно вернет информацию, сгруппированную в EquipmentGroup.

Дело в том, что когда у меня есть, например, более одного owner_indicator внутри EquipmentGroup, он вернет 2 строки. Это SQL 101. Но я должен возвращать только одну строку с пустым текстом вместо указателя владельца.

Каков самый простой способ сделать это? Я был бы рад получить ответ в SQL, но гораздо больше, чем рад получить его в Criteria JPA, хе-хе.

Если это имеет значение, я использую Oracle 12c.

Благодарю!

РЕДАКТИРОВАТЬ

В соответствии с запросом, вот некоторые данные:

Equipment
id    nickname   owner_indicator
1     EQP01      'V'
2     EQP02      'T'

EquipmentGroup_Equipment
equipment_group_id equipment_id
1                  1
1                  2

EquipmentGroup
id    name    description
1     GRP1    Group 1

Мой желаемый результат:

Result
EquipmentGroup.name EquipmentGroup.description, Equipment.owner_indicator
GRP1                Group 1                     (empty string)

Эта пустая строка будет возвращена, потому что я не хочу 2 строки, например

Result
EquipmentGroup.name EquipmentGroup.description, Equipment.owner_indicator
GRP1                Group 1                     'T'
GRP1                Group 1                     'V'

Если что-то большее, чем это необходимо, пожалуйста, посоветуйте.

Благодарю!

  • 0
    Пожалуйста, предоставьте образец данных и желаемых результатов. Вы также можете включить оператор SQL, который вы уже пробовали.
  • 1
    Вы знаете, что язык, используемый запросами Hibernate, не SQL, а HQL, верно?
Показать ещё 3 комментария
Теги:
hibernate
jpa

1 ответ

0

Я хочу, чтобы вы использовали основной запрос в EquipmentGroup и подзапрос о возвращаемых данных об оборудовании. Если у вас более 1 единицы оборудования около одной группы, вы должны вернуть DISTINCT пустым; если у вас есть 1 строка, возвращает owner_indicator, иначе вы можете вернуть 'None'

Попробуй это:

SELECT DISTINCT eg.name, eg.description, 
(SELECT 
CASE 
    WHEN count(e.id) > 1 THEN DISTINCT 'EMPTY'
    WHEN count(e.id) = 1 THEN e.owner_indicator
    ELSE 'none'
END
FROM Equipment e 
WHERE e.equipmentGroup.id = eg.id)
FROM EquipmentGroup eg
  • 0
    не должен ли счет быть на eg.id вместо e.id?
  • 0
    нет, вы считаете количество equipment.id так e.id
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню