duvidas com o GROUP BY e SUBSELECT

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 18 Out 2007 1:19 pm

aí galera... seguinte... eu to tentando executar o codigo:


Código: Selecionar todos
SELECT mês, MESTOT, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM
(
    SELECT TO_CHAR(S.SERAGE, 'MON-RR') mês, COUNT(1) MESTOT,
    (
        SELECT COUNT(1) MICOLOGIA
        FROM LABSERVICOS S2, LABSETORES ST2,
        LABSERVICOSSETOR SS2
        WHERE S2.SERID = SS2.SERID
        AND SS2.SETID = ST2.SETID
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = TO_CHAR(S.SERAGE, 'MON-RR')
        AND ST2.SETNOM = 'MICOLOGIA'
    ) MICOLOGIA
    FROM LABSERVICOS S
    WHERE S.SERAGE BETWEEN (SYSDATE-600000) AND (SYSDATE+60000)
    GROUP BY TO_CHAR(S.SERAGE, 'MON-RR')
    ORDER BY mês
);


ta dando o seguinte erro:

"ORA-00979: não é uma expressão GROUP BY"

e apontando para o "S.SERAGE" dentro do SUBSELECT....

alguém sabe se tem algum erro de sintaxe ou lógica ai???

agradeço a todos! =)

vlw!
Renan Orati
Localização: São José do Rio Preto - SP

Mensagemem Sex, 19 Out 2007 7:14 am

não fiz o teste por ta muito corrido aqui no trampo...

sexta feira parece q td quer dar pau

mais tenta ver +- isso vê se da certo
Código: Selecionar todos
SELECT mês, MESTOT, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM
(
    SELECT TO_CHAR(S.SERAGE, 'MON-RR') mês,MICOLOGIA.MICOLOGIA, COUNT(1) MESTOT
    FROM LABSERVICOS S ,
        (
        SELECT COUNT(1) MICOLOGIA
        FROM LABSERVICOS S2, LABSETORES ST2,
        LABSERVICOSSETOR SS2
        WHERE S2.SERID = SS2.SERID
        AND SS2.SETID = ST2.SETID
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = TO_CHAR(S.SERAGE, 'MON-RR')
        AND ST2.SETNOM = 'MICOLOGIA'
    ) MICOLOGIA
    WHERE S.SERAGE BETWEEN (SYSDATE-600000) AND (SYSDATE+60000)
    GROUP BY TO_CHAR(S.SERAGE, 'MON-RR') ,MICOLOGIA.MICOLOGIA
    ORDER BY mês
);
rodfbar
Localização: Batatais - SP

Mensagemem Sex, 19 Out 2007 4:23 pm

Nossa kara... bem pensado... pena que não deu certo... porque no segundo select... estou fazendo uma junção com a tabela "LABSERVICOS" e ele não aceita eu fazer esta junção no "FROM" saca?... mas valeu a dica ai... tenho certeza que ainda vou usar muito este tipo de lógica que você apresentou! =)

eu resolvi o problema com uma gambiarrinha aqui! rsrsrs

Tive que criar uma "VIEW" para selecionar os meses e gerar o "GROUP BY" ai ele aceita... com a mesma síntaxe... a unica diferença é que ao invés de eu usar o "TO_CHAR(S2.SERAGE, 'MON-RR')" na junção e no group by... eu usei o campo da view... que retorna o mesmo valor... e o oracle aceitou... assim:


Código: Selecionar todos
SELECT MESANO, MICOLOGIA, DECODE(MOD(ROWNUM, 2), 0, 0, 1) COR FROM
(
    SELECT VST.MESANO,
    (
        SELECT COUNT(1)
        FROM LABSERVICOS S2, LABSETORES ST2,
        LABSERVICOSSETOR SS2
        WHERE S2.SERID = SS2.SERID
        AND SS2.SETID = ST2.SETID
        AND TO_CHAR(S2.SERAGE, 'MON-RR') = VST.MESANO
        AND ST2.SETNOM = 'MICOLOGIA'
    ) MICOLOGIA
    FROM LABSERVICOS S, V_SERVICOSTEMPO VST
    WHERE S.SERAGE BETWEEN (SYSDATE-365) AND (SYSDATE)
    AND TO_CHAR(S.SERAGE, 'MON-RR') = VST.MESANO
    GROUP BY VST.MESANO
    ORDER BY TO_DATE(VST.MESANO, 'MM-RR')
);



vlw ai a ajuda! t+
Renan Orati
Localização: São José do Rio Preto - SP



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes