Array
(
)

Ajuda com SELECT/JOIN

Fabio Nascimento
   - 03 mar 2006

Galera é o seguinte, tenho essas tabelas:

TABELA
RI_Prot (Tabela que contem as informações dos Serviços Protocolados)

CODRIPROT (Codigo do Protocolo - Chave Primartia)
DATAFEITO (Data do Atendimento)
Tem muitos outros campos, mas só esse acima é importante

TABELA
RI_ProtAP (Cada Protocolo, pode ter N atos praticados, que ficam nessa tabela)

CODRIPROTAP (Codigo do Ato Praticado - Chave Primaria)
CODRIPROT (Codigo do Protocolo - Chave Estrangeira que indica a qual protocolo pertence esse ato praticado)
TOTAL (O valor desse ato, quanto custou)

TABELA
Caixa (Cada Protocolo pode ter N lançamentos no caixa, de entrada ou saida, que ficam nessa tabela)
CODCAIXA (Codigo do Lançamento no Caixa)
TIPO_PROT (Tipo do Protocolo, como o caixa aceita lançamento de vários ´tipos de protocolo´, não pude associar com uma FK diretamente para o Codigo do Protocolo, assim tenho 2 campos, esse que indica qual o tipo do protocolo e um outro abaixo que indica o numero do Protocolo)
PROTOCOLO (Numero do Protocolo que o lançamento se refere)
EXTORNADO (Indica se o lançamento foi extornado)

Bom, ai é o seguinte:

1) Se eu quero saber o total das custas dos Protocolos em um determinado periodo eu faço:

SELECT R.CODRIPROT,SUM(A.TOTAL)
FROM RI_PROT R
JOIN RI_PROTAP A
ON R.CODRIPROT = A.CODRIPROT
WHERE R.DATAFEITO BETEWEEN :DATA1 AND :DATA2
GROUP BY CODRIPROT

2) Se eu quero saber o total dos depositos dos Protocolos em um determinado periodo eu faço:

SELECT R.CODRIPROT,SUM(C.TOTAL)
FROM RI_PROT R
JOIN CAIXA C
ON R.CODRIPROT = C.PROTOCOLO
WHERE C.TIPOPROT = ´RI_Prot´ AND C.EXTORNADO IS NULL AND R.DATAFEITO BETWEEN :DATA1 AND :DATA2
GROUP BY CODRIPROT

Acontece que eu gostaria de UNIR essas consultas, para saber de uma só vez o Codigo do Protocolo, O Valor do Deposito e o Valor das Custas. Pois bem, eu tentei assim:

SELECT R.codriprot,SUM(C.VALOR) AS Deposito,SUM(A.TOTAL) AS Custas
FROM RI_PROT R
join ri_protap a
on r.codriprot = a.codriprot
JOIN CAIXA C
ON r.codriprot = C.protocolo and C.tipoprot = ´RI_Prot´ AND C.extornado IS NULL
where R.datafeito BETWEEN :DATAINICIO AND :DATAFIM
GROUP by R.codriprot

Não da erro de sintaxe, mas ele retorna algums valores errados =/

Deu pra entender, e será que alguem tem alguma idéia?

Vlw!


Ermindo
   - 07 mar 2006

Bom isso q vc quer saber, pode ser feito de varias formas, dependento do banco de dados.


qual banco q vc usa?


[]´ s

ATT

Ermindo