ORA-00923:预计 - 获得CLOB

时间:2015-08-20 15:34:10

标签: sql oracle

我有一个使用GROUP BY的查询,因此我需要将所选项目放在GROUP BY或聚合函数中。当我把它们放在GROUP BY中时,t2.category会在标题中引发错误。我尝试在CASE/WHEN语句中合并聚合函数,而不是将t2.category放在GROUP BY中,但我收到invalid identifier错误。 t2.category的一个示例可能是"服务器可靠性 - 由于db dropout"而导致的连接问题。我怎样才能摆脱这个错误?

SELECT
 msr._id,

 CASE ans.question_id WHEN '767' THEN ans.category END "767",
 CASE ans.question_id WHEN '768' THEN ans.category END "768"

FROM table1 t1
LEFT OUTER JOIN table2 t2
ON t1._id = t2._id

WHERE t2.question_id in (767,768) AND t2.assigned_to not in ('Smith, John')
 AND t1.request_type_id in (288,289) and t1.status_id not in (0, 11);

GROUP BY t1._id, t2.question_id, t2.category

1 个答案:

答案 0 :(得分:2)

除了仅使用CLOB值的前4000个字符(这可能是不可接受的)之外,我唯一可以看到解决CLOB(including that you can't group by them)上的限制的方法是加入第二个表多次:

SELECT
 msr.id,
 ans_767.category AS "767",
 ans_768.category AS "768"
FROM msr
LEFT OUTER JOIN ans ans_767
ON ans_767.id = msr.id
AND ans_767.question_id = 767
AND ans_767.assigned_to not in ('Smith, John')
LEFT OUTER JOIN ans ans_768
ON ans_768.id = msr.id
AND ans_768.question_id = 768
AND ans_768.assigned_to not in ('Smith, John')
WHERE msr.request_type_id in (288,289)
AND msr.status_id not in (0, 11);

        ID 767                  768                
---------- -------------------- --------------------
         1 back                 dev
         2                      dev

它们都是左连接,但意味着你只返回一行,所以不必折叠你从你的版本的两行获得的值。

我必须将question_id过滤器移到每个ON子句中;但是我也移动了assigned_to过滤器,因为它在where子句中将外连接转回到内部连接中。

这很丑,但可以承受两个问题ID,但在维护和可读性方面不能很好地扩展。

SQL Fiddle demo,使用您之前提问的值;和你原来的代码(有点像;编辑了一下)failing

相关问题