2014-11-11 2 views
1

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

Некоторые фона:

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

Equipment 
id 
nickname 
owner_indicator 
{...} 

EquipmentGroup_Equipment 
equipment_id 
equipment_group_id 

EquipmentGroup 
id 
name 
description 

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

EquipmentGroup.name, EquipmentGroup.description, Equipment.owner_indicator 

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

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

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

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

Спасибо!

EDIT

В соответствии с просьбой, вот некоторые данные:

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 

Мой хотел Resultset является:

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, правильно? –

+0

@JBNizet yep, но если кто-то помогает мне с SQL, я могу сам перевести запрос. Благодаря! –

ответ

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

не должен быть включен, например.id вместо e.id? –

+0

нет, вы подсчитаете количество оборудования.и таким образом e.id –

+0

, но что, если все оборудование внутри группы имеет одни и те же атрибуты? таким образом я хотел бы вернуть его. –

Смежные вопросы