PROBLEMA COM O ORDER BY EM UM UNION [DIFICIL]

WEBIER 14/07/2011 15:04:12
#379159
Estou usando o UNION para unir 3 tabelas tabelas (SELECT)...

... Tudo funcionando...

mas o problema é que quero ordenar a exibição pelo campo HORA (as 3 tabelas tem esse campo), mas nao organiza... simplesmente aparece tudo sem nenhuma ordem.

olha meu codigo ai:
Call Abrir_BancodeDados

SQL = [Ô]SELECT PARCELAS.Hora AS HORA_PARC, PARCELAS.CODIGO AS CAMPOcp, PEDIDOS.COD_PEDIDO AS CAMPO00, Cliente.NOME AS CAMPO01, PARCELAS.FORMA_PGTO AS CAMPO0x, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PEDIDOS.TIPO_CARTAO AS CAMPOTP, PEDIDOS.TIPO_CARTAO as CAMPOTC, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.STATUS = true and PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & ORIGEM_CAIXA & [Ô] ORDER BY HORA[Ô] & _
[Ô] UNION ALL [Ô] & _
[Ô]SELECT HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, DESCRICAO AS CAMPO01, [ô]SUPRIMENTO[ô] AS CAMPO0x, VALOR AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, [ô]0[ô] as CAMPOTC, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_ENTRADA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & _
[Ô] UNION ALL [Ô] & _
[Ô]SELECT CAIXA_SAIDA.HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, CAIXA_SAIDA.DESCRICAO AS CAMPO01, [ô]SAÍDA[ô] AS CAMPO0x, [ô]0[ô] AS CAMPO02, CAIXA_SAIDA.VALOR AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, COD_HAVER, SETOR, DATA, CODIGO, [ô]0[ô] as CAMPOTC FROM CAIXA_SAIDA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]

Set RS = BD.OpenRecordset(SQL)


agora seu eu tirar o UNION e deixar somente a primeira SELECT ele ordena direitinho
LLAIA 14/07/2011 15:19:35
#379163
Já experimentou colocar o Order by no último select? Se não estou enganado, é isso.
PARREIRA 14/07/2011 15:43:22
#379169
Resposta escolhida
Call Abrir_BancodeDados

SQL = [Ô](SELECT PARCELAS.Hora AS HORA_PARC, PARCELAS.CODIGO AS CAMPOcp, PEDIDOS.COD_PEDIDO AS CAMPO00, Cliente.NOME AS CAMPO01, PARCELAS.FORMA_PGTO AS CAMPO0x, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PEDIDOS.TIPO_CARTAO AS CAMPOTP, PEDIDOS.TIPO_CARTAO as CAMPOTC, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.STATUS = true and PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & ORIGEM_CAIXA & [Ô] )UNION ALL ) [Ô] & _
[Ô]SELECT HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, DESCRICAO AS CAMPO01, [ô]SUPRIMENTO[ô] AS CAMPO0x, VALOR AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, [ô]0[ô] as CAMPOTC, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_ENTRADA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & _
[Ô]) UNION ALL( [Ô] & _
[Ô]SELECT CAIXA_SAIDA.HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, CAIXA_SAIDA.DESCRICAO AS CAMPO01, [ô]SAÍDA[ô] AS CAMPO0x, [ô]0[ô] AS CAMPO02, CAIXA_SAIDA.VALOR AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, COD_HAVER, SETOR, DATA, CODIGO, [ô]0[ô] as CAMPOTC FROM CAIXA_SAIDA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]#)[Ô] & _
[Ô] ORDER BY 1


Set RS = BD.OpenRecordset(SQL)


Tenta assim.


WEBIER 14/07/2011 16:29:22
#379179
deu ERRO DE SINTAXE NA UNIÃO
PARREIRA 14/07/2011 16:32:04
#379180
SQL = [Ô](SELECT PARCELAS.Hora AS HORA_PARC, PARCELAS.CODIGO AS CAMPOcp, PEDIDOS.COD_PEDIDO AS CAMPO00, Cliente.NOME AS CAMPO01, PARCELAS.FORMA_PGTO AS CAMPO0x, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PEDIDOS.TIPO_CARTAO AS CAMPOTP, PEDIDOS.TIPO_CARTAO as CAMPOTC, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.STATUS = true and PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & ORIGEM_CAIXA & [Ô] ) UNION ALL ( [Ô] & _
[Ô]SELECT HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, DESCRICAO AS CAMPO01, [ô]SUPRIMENTO[ô] AS CAMPO0x, VALOR AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, [ô]0[ô] as CAMPOTC, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_ENTRADA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô] & _
[Ô]) UNION ALL ( [Ô] & _
[Ô]SELECT CAIXA_SAIDA.HORA AS HORA_PARC, [ô][ô] AS CAMPOcp, [ô][ô] AS CAMPO00, CAIXA_SAIDA.DESCRICAO AS CAMPO01, [ô]SAÍDA[ô] AS CAMPO0x, [ô]0[ô] AS CAMPO02, CAIXA_SAIDA.VALOR AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, [ô]0[ô] AS CAMPOTP, COD_HAVER, SETOR, DATA, CODIGO, [ô]0[ô] as CAMPOTC FROM CAIXA_SAIDA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yyyy[Ô]) & [Ô]#)[Ô] & _
[Ô] ORDER BY 1


Set RS = BD.OpenRecordset(SQL)


Ve agora
WEBIER 14/07/2011 16:51:45
#379187
aparentemente funcionou! vou testar a fundo agora!

teria como vc explicar a diferença entre seu codigo e o meu?
PARREIRA 14/07/2011 16:55:38
#379189
Quando você faz um union e coloca o order by no primeiro ou segundo select, ele vai order aquele e depois na hora de juntar ele se perde, então coloco cada select separado entre () e sem order by, pois assim forço a primeiro fazer a consulta, depois no final quando já está tudo unido, dou o order by da coluna pelo numero dela, como hora é a primeira coluna , coloquei 1, se fosse pela segunda ou terceira, era só colocar o order by e a posição que a coluna que você quer order, no caso 1.
Tópico encerrado , respostas não são mais permitidas