У меня возникли проблемы с созданием соответствующего 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'
Если что-то большее, чем это необходимо, пожалуйста, посоветуйте.
Благодарю!
Я хочу, чтобы вы использовали основной запрос в 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