gpt4 book ai didi

java - SQL/Hibernate 标准 - 按故障分组

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:01 24 4
gpt4 key购买 nike

我在创建适当的 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

我想要的结果集是:

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 上使用主查询,并在 Equipment 上使用有关返回数据的子查询。如果一组设备有超过 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

关于java - SQL/Hibernate 标准 - 按故障分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26865654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com