我有一个使用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
答案 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。