- Este tópico contém 26 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 4 meses atrás por
Tiago_BB.
-
AutorPosts
-
3 de novembro de 2009 às 7:38 pm #90666
Tiago_BB
ParticipanteOla pessoal.
Tenho um subselect que coloquei um order by nele…
Prém da o erro: ORA-00907: missing right parenthesis.
Segue meu subselect:
(SELECT A.DATA_TAB FROM TAB A WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESC)Alguém pode me ajudar?
No sql funciona normalmente.
Atte.[/quote]
3 de novembro de 2009 às 8:00 pm #90669hudsona
ParticipanteQual a consulta inteira ?
3 de novembro de 2009 às 8:01 pm #90670Leonardo Litz
ParticipanteThiago, este select esta em uma subselect ou é somente ela?
Se for somente ela, tire os parentes presentos no inicio e no fim:
SELECT A.DATA_TAB FROM TAB A WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESCVlw Leonardo Litz
3 de novembro de 2009 às 8:03 pm #90671Tiago_BB
Participante
SELECT * FROM (SELECT
CASE WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2)
THEN (SELECT A.DATA_TAB FROM TAB A WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESC)
ELSE
DATA_TAB END
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
Obrigado pelo interesse!
3 de novembro de 2009 às 8:29 pm #90672Leonardo Litz
ParticipanteTente assim:
SELECT *
FROM (SELECT CASE
WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2) THEN
(SELECT *
FROM(SELECT A.DATA_TAB
FROM TAB A
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
AND ROWNUM = 1
ORDER BY A.DATA_TAB DESC))
ELSE
DATA_TAB
END
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1Só uma coisa, creio que vc queira trazer o ultimo regristro da tabela, como o rownum esta antes do order by, neste caso voce nao vai trazer o ultimo. Faça assim
select *
FROM(SELECT A.DATA_TAB
FROM TAB A
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
ORDER BY A.DATA_TAB DESC) awhere rownum < 2</code>Desta forma trará apenas o ultimo registro da tabela.
Vlw Leonardo Litz
3 de novembro de 2009 às 8:33 pm #90673hudsona
Participante[quote=”Litz”:bmhg44m6]Thiago, este select esta em uma subselect ou é somente ela?
Se for somente ela, tire os parentes presentos no inicio e no fim:
SELECT A.DATA_TAB FROM TAB A WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESCVlw Leonardo Litz[/quote]
Thiago
Esse alias “b” ta no local certo ?
SELECT A.DATA_TAB FROM TAB A WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESC
Att
3 de novembro de 2009 às 8:44 pm #90674Tiago_BB
ParticipanteFiz da forma sugerida:
SELECT *
FROM (SELECT CASE
WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2) THEN
(SELECT *
FROM(SELECT A.DATA_TAB
FROM TAB A
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
AND ROWNUM = 1
ORDER BY A.DATA_TAB DESC))
ELSE
DATA_TAB
END
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
Mas da o erro: ORA-00904: “B”.”DATA_TAB”: invalid identifier no trecho em negrito (linha 7)
😕 [/quote]
3 de novembro de 2009 às 8:46 pm #90675rwarstat
ParticipanteDeu o erro de invalid identifier por que tu tá usando um alias de tabela para definir o campo, mas não tem nenhuma tabela com alias B.
3 de novembro de 2009 às 8:46 pm #90676Leonardo Litz
ParticipanteNo from o nome da tabela esta TABB é isso mesmo?
Não seria TAB BVlw Leonardo Litz
3 de novembro de 2009 às 8:48 pm #90677Tiago_BB
ParticipanteSim.. é TAB B.
Erro de digitação!!!
Conforme demonstrado acima tentei da seguinte forma:
SELECT *
FROM (SELECT CASE
WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2) THEN
(SELECT *
FROM(SELECT A.DATA_TAB
FROM TAB A
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
AND ROWNUM = 1
ORDER BY A.DATA_TAB DESC))
ELSE
DATA_TAB
END
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
Mas da o erro: ORA-00904: “B”.”DATA_TAB”: invalid identifier no trecho em negrito (linha 7)
Agradeço o interesse de todos!!!
3 de novembro de 2009 às 8:55 pm #90678hudsona
ParticipanteTiago_BBn[quote]Sim.. é TAB B.
Erro de digitação!!!
Conforme demonstrado acima tentei da seguinte forma:
SELECT *
FROM (SELECT CASE
WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2) THEN
(SELECT *
FROM(SELECT A.DATA_TAB
FROM TAB A
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
AND ROWNUM = 1
ORDER BY A.DATA_TAB DESC))
ELSE
DATA_TAB
END
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
Mas da o erro: ORA-00904: “B”.”DATA_TAB”: invalid identifier no trecho em negrito (linha 7)
Mas é isso!!
Você esta usando um alias b e não esta referenciando nenhuma tabela para esse alias.
SELECT A.DATA_TAB FROM TAB A,TAB B WHERE A.DATA_TAB < B.DATA_TAB AND A.FERIADO_TAB = 0 AND ROWNUM = 1 ORDER BY A.DATA_TAB DESC
Você precisa referenciar a tabela para esse alias b.
3 de novembro de 2009 às 9:01 pm #90679Tiago_BB
ParticipanteEntaum…
Referente a esse trecho:
WHERE A.DATA_TAB < B.DATA_TAB
Esse B.DATA_TAB é referente ao FROM TAB B desse trecho final:
.
.
.
FROM TABB
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
3 de novembro de 2009 às 9:02 pm #90680Tiago_BB
ParticipanteCORRIGINDO?
.
.
.
FROM TAB B
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090422'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
3 de novembro de 2009 às 9:10 pm #90681Tiago_BB
ParticipantePessoal.
Fiz e funcionou… não sei se é a melhor maneira
Ficou assim:
SELECT *
FROM (SELECT CASE
WHEN (FERIADO_TAB = 1 OR FERIADO_TAB = 2) THEN
(SELECT *
FROM(SELECT A.DATA_TAB
FROM TAB A, TAB B
WHERE A.DATA_TAB < B.DATA_TAB
AND A.FERIADO_TAB = 0
AND B.CENTRO_CUSTO_TAB = 30001
AND B.DATA_TAB < '20090424'
AND B.DIA_SEMANA_TAB = 2
AND ROWNUM = 1
ORDER BY A.DATA_TAB DESC))
ELSE
DATA_TAB
END
FROM TAB B
WHERE CENTRO_CUSTO_TAB = 30001
AND DATA_TAB < '20090424'
AND DIA_SEMANA_TAB = 2
ORDER BY DATA_TAB DESC)
WHERE ROWNUM = 1
O que vocês acham?
😮
3 de novembro de 2009 às 9:13 pm #90682Leonardo Litz
ParticipanteSó falta fazer o esquema do rownum no order by da subselect que esta no case..
Dá uma olhada no desempenho também.. veja se esta legal…Vlw Leonardo Litz
-
AutorPosts
- Você deve fazer login para responder a este tópico.