Ajuda com SELECT/JOIN
03/03/2006
0
Galera é o seguinte, tenho essas tabelas:
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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)
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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!
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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)
[b:8862fbbd6d]TABELA[/b:8862fbbd6d]
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!
Fabio Nascimento
Curtir tópico
+ 0
Responder
Posts
07/03/2006
Ermindo
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
qual banco q vc usa?
[]´ s
ATT
Ermindo
Responder
Clique aqui para fazer login e interagir na Comunidade :)