Eu tenho uma série de tabelas definidas em um procedimento armazenado para eventualmente retornar ao aplicativo como este, culminando em uma tabela simples que contém valores distintos de uma tabela definida anteriormente e a contagem de quantas vezes esse valor distinto se repete. Por algum motivo, parece que não está funcionando...
...procedimento armazenado...
OPEN p_retcursor FOR
WITH r AS
(SELECT ...
FROM MYDATATABLE),
s AS
(SELECT ...
FROM r
WHERE ...)
,
t AS
(SELECT ...
WHERE ...
JOIN ...
ON ...
FROM s)
SELECT t.*, COUNT(*) as distinctABcount
FROM t
GROUP BY t.columnA, t.columnB
Como faço isso funcionar? Eu acho que tecnicamente a coluna A e a coluna B não são colunas de uma tabela, mas são colunas de t, então acho que a ordem de avaliação está um pouco confusa devido ao fato de que t não é uma tabela real ... A consulta falha em torno da contagem ( *) parte da coluna e pode estar falhando no GROUP BY.
Obrigado.
Atualização 1: Tenho uma teoria de que, se eu agrupar todas as tabelas nomeadas em subconsultas dentro da cláusula from, isso funcionará ... mas isso não parece ser uma solução que produzirá código legível, considerando que esse procedimento armazenado tem centenas de linhas ...
Atualização 2:
a teoria estava errada, a tabela derivada não era o problema, mas, conforme apontado pela resposta, você não pode solicitar mais colunas do que definiu na cláusula group by. Eu consertei corrigindo a seção final da consulta como sugerido:
select t.columnA, t.columnB, COUNT(*) as distinctABcount
FROM t
GROUP BY t.columnA, t.columnB
que roda corretamente.
A menos que haja algo específico para a sintaxe do Oracle, minha suspeita é que você tenha mais do que columnA e columnB em sua tabela derivada
t
. Nesse caso, você precisará agrupar por essas colunas, aplicar uma agregação a elas ou não solicitá-las (substitua t.* por t.columnA, t.columnB)