[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