SQL / Hibernate标准 - 按麻烦分组

时间:2014-11-11 13:06:27

标签: java sql oracle hibernate jpa

我在这里遇到一些麻烦来创建一个合适的SQL查询。任何帮助将不胜感激!

一些背景知识:

我有以下实体

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分组的信息。

问题是,当我在一个EquipmentGroup中有多个owner_indicator时,它将返回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

我想要的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'

如果需要更多信息,请告知。

谢谢!

1 个答案:

答案 0 :(得分:0)

我知道你必须在EquipmentGroup上使用主查询,并在设备上使用关于返回数据的子查询。 如果一组中有多于1个设备行,则必须将DISTINCT返回为空;如果你有1行返回owner_indicator,否则你可以返回'无'

试试这个:

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