[firebase-br] RES: Como Ordenar neste caso
Zottis
bzottis em ig.com.br
Seg Abr 23 12:49:11 -03 2012
Olá, obrigado pela resposta,
Tenho a Tabela Cidades
CREATE TABLE CIDADES (
COD_CIDADE PK NOT NULL /* PK = INTEGER NOT NULL */,
CIDADE VARCHAR_40 NOT NULL /* VARCHAR_40 = VARCHAR(40) */,
UF UFS /* UFS = CHAR(2) */,
COD_GRUPO_CIDADES PK
);
1-LONDRINA
2-CURITIBA
3-NOVA ANDRADINA
4-SAO PAULO
5-CIANORTE
.......
Na tabela ROTAS_NOME
CREATE TABLE ROTAS_NOMES (
COD_ROTA_NOME PK NOT NULL /* PK = INTEGER NOT NULL */,
NOME VARCHAR_40 /* VARCHAR_40 = VARCHAR(40) */
);
1-INDUSTRIAL
2-SAUDE
3-ROTA1
4-ROTA_CIANORTE
.......
na tabela CIDADES_ROTA tenho várias Cidades que faz o relacionamento a
tabela ROTAS_NOME(Via Sistema)
A estrutura dela:
CREATE TABLE CIDADES_ROTA (
CODIGO PK NOT NULL /* PK = INTEGER NOT NULL */,
COD_CIDADE PK /* PK = INTEGER NOT NULL */,
COD_ROTA PK /* PK = INTEGER NOT NULL */,
ORDEM PK /* PK = INTEGER NOT NULL */
);
ALTER TABLE CIDADES_ROTA ADD CONSTRAINT UNQ_CIDADE_CIDADES_ROTA UNIQUE
(COD_ROTA, COD_CIDADE);
ALTER TABLE CIDADES_ROTA ADD CONSTRAINT PK_CIDADES_ROTA PRIMARY KEY
(CODIGO);
ALTER TABLE CIDADES_ROTA ADD CONSTRAINT FK_CIDADES_ROTA_CIDADE FOREIGN KEY
(COD_CIDADE) REFERENCES CIDADES (COD_CIDADE) ON UPDATE CASCADE;
4-5-1-1 (CIANORTE)
2-2-1-2 (CURITIBA)
1-1-1-3 (LONDRINA)
3-3-1-4 (NOVA ANDRADINA)
Tenho Uma outra tabela que é ROTAS_CLIENTE que se relaciona ao Cliente
CREATE TABLE ROTAS_CLIENTE (
CODIGO PK NOT NULL /* PK = INTEGER NOT NULL */,
COD_CLIENTE PK /* PK = INTEGER NOT NULL */,
COD_ROTA_NOME PK /* PK = INTEGER NOT NULL */
);
Nesta tabela cadastramos as rotas que o cliente pertence
E tenho uma Tabela ROTAS que é Montada Várias Vezes
CREATE TABLE ROTAS (
COD_ROTA PK NOT NULL /* PK = INTEGER NOT NULL */,
DATA_CAD DATAS /* DATAS = DATE */,
COD_ROTA_NOME PK /* PK = INTEGER NOT NULL */,
DATA_INICIO DATAS /* DATAS = DATE */,
DATA_FIM DATAS /* DATAS = DATE */,
KM_INICIO MOEDA /* MOEDA = NUMERIC(18,2) DEFAULT 0 */,
KM_FIM MOEDA /* MOEDA = NUMERIC(18,2) DEFAULT 0 */,
ABERTA BOLEANO_N /* BOLEANO_N = CHAR(1) DEFAULT 'N' CHECK
(value in ('N' , 'S')) */,
KILOMETROS COMPUTED BY ( COALESCE(km_fim - km_inicio,0) ),
DIAS COMPUTED BY ( COALESCE(data_fim - data_inicio,0) ),
PREVISAO_COLETA DATAS /* DATAS = DATE */
);
Quando estou cadastrando nessa tabela, eu preciso puxar todos os clientes
dessa rota(que verifico através da tabela Rotas_Cliente)
E Ordenar Pela tabela CIDADES_ROTA no campo ordem, pois a ordem que o
motorista vai é pelas cidades da Rota.
Estou fazendo assim, mas me retorna uma ordem errada
select c.COD_CLIENTE, c.DATA_CAD, c.COD_EMPRESA,
c.NOME_FANTASIA, c.RAZAO_SOCIAL,
c.NOME_MONTADO, c.COD_CIDADE, cd.cidade ,
c.COD_AREA_ATUACAO, c.COD_TIPO_AREA,
c.INICIO_CONTRATO, c.FINAL_CONTRATO, c.INTERVALO_COLETA,
c.TIPO_BOMBONA, c.FORMA_PGTO,
c.VALOR_KILO, c.VALOR_KILO_EXCEDE, c.LIMITE_KILO,
c.TAXA_RECOLHIMENTO, c.BOMBONA,
c.QTD_COLETAS, c.COD_CLASSIF_RESIDUOS, c.VALOR_MENSAL,
c.COD_CLIENTE_EMPRESA, c.PROXIMA_COLETA,
c.SERASA, c.CENTRAL_COBRANCA, c.BLOQUEADO,
c.INADIMPLENTE, c.COM_NOTA_FISCAL,
c.com_comodato, c.contrato_retornado, c.cod_master,
c.COD_DESTINO,
(select Uf from Cidades where Cidades.Cod_cidade = C.Cod_cidade
) as UF,
(select area from areas_atuacao where
areas_Atuacao.cod_area_atuacao = C.Cod_area_atuacao ) as Area_Atuacao,
(select TIPO_AREA from TIPO_AREA where TIPO_AREA.cod_TIPO_area =
C.Cod_TIPO_area) as TIPO_Area,
(select Classificacao from CLASSIF_RESIDUOS where
CLASSIF_RESIDUOS.COD_Classificacao = C.COD_CLASSIF_RESIDUOS) as
Classific_Resid,
(select min(FAR_mtr.DATA_COLETA) from FAR_MTR where
FAR_MTR.COD_CLIENTE = C.COD_Cliente) as Primeira_COLETA ,
(select Max(FAR_MTR.DATA_COLETA) from FAR_MTR where
FAR_MTR.COD_Cliente = C.COD_Cliente) as Ultima_COLETA,
(select Count(*) from FAR_MTR where FAR_MTR.COD_CLIENTE =
C.COD_Cliente and far_mtr.baixado = 'N' ) as MTR_ABERTA,
(select Count(*) from FAR_MTR where FAR_MTR.COD_CLIENTE =
C.COD_Cliente and far_mtr.cod_rota = :VarRota/*:VarRota_Atual*/) as MTR_ROTA
from Clientes c, rotas_cliente R, cidades cd, cidades_rota CR
where c.DELETADO = 'N'
and c.cod_cidade = cd.cod_cidade
and c.cod_cliente = r.cod_cliente
and CR.cod_rota = R.cod_rota_nome
and r.cod_rota_nome = :VarRota
and c.ativo = 'S'
order by CR.ordem
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Wilson Rosa
Enviada em: segunda-feira, 23 de abril de 2012 10:33
Para: FireBase
Assunto: Re: [firebase-br] Como Ordenar neste caso
Zottis,
Pelo que entendi na tabela CIDADES_ROTA há mais de um registro por ROTA,
correto?
Se há mais de um registro por ROTA, como você faz pra trazer um registro
dessa tabela por Cliente, pra assim poder ordenar pelo ORDEM?
Qual a relação dessa tabela com a tabela CLIENTES?
*Wilson Rosa*
Desenvolvedor Desk
*wsrosa em gmail.com
*
*
*
Em 23 de abril de 2012 08:38, Zottis <bzottis em ig.com.br> escreveu:
> Pessoal, to numa sinuca de bico
>
> Tenho uma tabela clientes COD_CLIENTE-,......,COD_CIDADE
>
> Tenho a Tabela ROTAS_NOME- COD_ROTA_NOME, ROTA .... que armazena o
> nome das rotas(Cianorte, Londrina, Tapejara, Rota1, Industrial,
> Solidos, etc)
>
> Tenho a Tabela ROTA_CLIENTE- CODIGO, COD_ROTA_NOME, COD_CLIENTE....que
> armazena as rotas que o cliente pertence
>
> Tenho a Tabela CIDADES_ROTA- COD_ROTA_NOME, COD_CIDADE, ORDEM que
> armazena as cidades que fazem parte da rota
>
>
>
> Tenho a Tabela ROTAS- CODIGO, COD_ROTA_NOME Aqui montamos a rota
>
>
>
> Preciso buscar todos os clientes pertencentes a rota que estou
> montando mas ordenar pelo campo ordem da tabela CIDADES_ROTA
>
> Como faria isso?
>
>
>
> Estou fazendo assim:
>
>
>
> select c.COD_CLIENTE, c.DATA_CAD, c.COD_EMPRESA,
> c.NOME_FANTASIA, c.RAZAO_SOCIAL,
>
> c.NOME_MONTADO, c.COD_CIDADE, cd.cidade ,
> c.COD_AREA_ATUACAO, c.COD_TIPO_AREA,
>
> c.INICIO_CONTRATO, c.FINAL_CONTRATO,
c.INTERVALO_COLETA,
> c.TIPO_BOMBONA, c.FORMA_PGTO,
>
> c.VALOR_KILO, c.VALOR_KILO_EXCEDE, c.LIMITE_KILO,
> c.TAXA_RECOLHIMENTO, c.BOMBONA,
>
> c.QTD_COLETAS, c.COD_CLASSIF_RESIDUOS, c.VALOR_MENSAL,
> c.COD_CLIENTE_EMPRESA, c.PROXIMA_COLETA,
>
> c.SERASA, c.CENTRAL_COBRANCA, c.BLOQUEADO,
> c.INADIMPLENTE, c.COM_NOTA_FISCAL,
>
> c.com_comodato, c.contrato_retornado, c.cod_master,
> c.COD_DESTINO,
>
>
>
> (select Uf from Cidades where Cidades.Cod_cidade =
> C.Cod_cidade
> ) as UF,
>
> (select area from areas_atuacao where
> areas_Atuacao.cod_area_atuacao = C.Cod_area_atuacao ) as Area_Atuacao,
>
> (select TIPO_AREA from TIPO_AREA where
> TIPO_AREA.cod_TIPO_area =
> C.Cod_TIPO_area) as TIPO_Area,
>
> (select Classificacao from CLASSIF_RESIDUOS where
> CLASSIF_RESIDUOS.COD_Classificacao = C.COD_CLASSIF_RESIDUOS) as
> Classific_Resid,
>
> (select min(FAR_mtr.DATA_COLETA) from FAR_MTR where
> FAR_MTR.COD_CLIENTE = C.COD_Cliente) as Primeira_COLETA ,
>
> (select Max(FAR_MTR.DATA_COLETA) from FAR_MTR where
> FAR_MTR.COD_Cliente = C.COD_Cliente) as Ultima_COLETA,
>
> (select Count(*) from FAR_MTR where FAR_MTR.COD_CLIENTE =
> C.COD_Cliente and far_mtr.baixado = 'N' ) as MTR_ABERTA,
>
> (select Count(*) from FAR_MTR where FAR_MTR.COD_CLIENTE =
> C.COD_Cliente and far_mtr.cod_rota = :VarRota_Atual) as MTR_ROTA
>
>
>
> from Clientes c, rotas_cliente R, cidades cd
>
> where c.DELETADO = 'N'
>
> and c.cod_cidade = cd.cod_cidade
>
> and c.cod_cliente = r.cod_cliente
>
> and r.cod_rota_nome = :VarRota
>
> and c.ativo = 'S'
>
>
>
> mas falta a parte da ordenação
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista