我有一个使用GROUP BY的查询,所以我需要将所选的项放入GROUP BY或聚合函数中。当我将它们放到GROUP BY中时,t2.category会在标题中抛出错误。我尝试在CASE/WHEN语句中添加一个聚合函数,而不是将t2.category放在GROUP BY中,但是我得到了一个invalid identifier错误。t2.category的一个例子可能是“服务器可靠性-由于数据库丢失而导致的连接问题”。我怎样才能消除这个错误?
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发布于 2015-08-20 16:58:25
除了只使用CLOB值的前4000个字符(这可能是不可接受的)之外,我看到绕过CLOB (包括你不能按他们分组)的唯一方法是多次连接到第二个表:
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子句中将外部联接转换为内部联接。
对于两个问题is来说,这是很难看的,但却是可以忍受的,但是在维护和可读性方面没有很好的扩展。
演示,使用您上一个问题中的值;以及您的原始代码(某种程度上;编辑了一点) 失败。
https://stackoverflow.com/questions/32122457
复制相似问题