Página 1 de 1

duvidas com o GROUP BY e SUBSELECT

Enviado: Qui, 18 Out 2007 1:19 pm
por Renan Orati
aí galera... seguinte... eu to tentando executar o codigo:

Selecionar tudo

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!

Enviado: Sex, 19 Out 2007 7:14 am
por rodfbar
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

Selecionar tudo

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 
);

Enviado: Sex, 19 Out 2007 4:23 pm
por Renan Orati
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 isso na junção e no group by:

Selecionar tudo

TO_CHAR(S2.SERAGE, 'MON-RR')
eu usei o campo da view... que retorna o mesmo valor... e o oracle aceitou... assim:

Selecionar tudo

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+