PROBLEMA COM O ORDER BY EM UM UNION [DIFICIL]
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:
agora seu eu tirar o UNION e deixar somente a primeira SELECT ele ordena direitinho
... 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
Já experimentou colocar o Order by no último select? Se não estou enganado, é isso.
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.
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.
deu ERRO DE SINTAXE NA UNIÃO
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
[Ô]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
aparentemente funcionou! vou testar a fundo agora!
teria como vc explicar a diferença entre seu codigo e o meu?
teria como vc explicar a diferença entre seu codigo e o meu?
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