【发布时间】:2012-12-19 15:17:56
【问题描述】:
我是在简化问题,但是这里的概念应该是一样的……
假设我们有一个表FOO,其中字段为ID 和ATTRIB,还有一个表BAR,字段为ID、A_MATCHING_ID、STATUS。这些表如下所示:
表 FOO:
ID - ATTRIB
=====
1001 - ATR_A
1002 - ATR_B
1003 - ATR_A
1004 - ATR_B
1005 - ATR_B
etc.
表格栏:
ID - FOO_MATCHING_ID - STATUS
=====
9901 - 1001 - STAT_A
9902 - 1001 - STAT_A
9903 - 1001 - STAT_B
9904 - 1002 - STAT_C
9905 - 1002 - STAT_B
9906 - 1002 - STAT_B
9907 - 1003 - STAT_A
etc.
FOO 与 BAR 之间存在一对多关系。
我想使用计算/依赖字段 [HAS_STAT_A] 对这两个表运行查询:
预期的查询结果:
FOO_ID - HAS_STAT_A
=====
1001 - TRUE
1002 - FALSE
1003 - TRUE
我怎样才能做到这一点?
SELECT FOO.ID AS FOO_ID, [FILL THIS IN] AS HAS_STAT_A
FROM FOO
JOIN BAR ON FOO.ID = BAR.FOO_MATCHING_ID;
我想过使用CASE,但不知道如何在多条记录中使用它。我也想过添加一些额外的子查询,但也不知道如何安排这些。
This is similar,但不是我想要实现的。它导致我出现以下情况,但我收到GROUP BY 错误。当我添加GROUP BY 时,我得到MISSING KEYWORD 错误。
SELECT FOO.ID AS FOO_ID,
INSTR (LISTAGG (BAR.STATUS, ',') WITHIN GROUP (ORDER BY BAR.STATUS), 'STAT_A') AS HAS_STAT_A
FROM FOO
JOIN BAR ON FOO.ID = BAR.FOO_MATCHING_ID;
【问题讨论】:
标签: sql oracle concatenation grouping