Duvida com sql

4 respostas
satangoss

Olé pessoal preciso trazer alguns dados de várias tabelas diferentes, porem nessa query era pra voltar dois registros, um dos registros não tem alguns dados da coluna preenchida ele simplesmente omite o segundo resultado, como faço para ele mostrar um falor nullo ou zero na query quando ela não existir?
A minha query esta desta forma:

SELECT  DISTINCT "TOT_PF_CONTRATO_CFFTB003" AS TotalPontosFuncaoContrato,  "VALOR_PF_CFFTB003" AS ValorPontoFuncaoContrato, SUM(DISTINCT "TAM_PF_ESTIMADO_CFFTB004") AS TotalPontoFuncaoEstimado, SUM( DISTINCT "VALOR_PAGO25_OS_CFFTB005") AS ValorTotalValorPago25, SUM(DISTINCT "VALOR_PAGO75_CFFTB008")  AS ValorTotalValorPago75, SUM(DISTINCT  "TAM_PF_OS_CFFTB005") AS TotalPontosFuncaoContratadoOS, (SELECT DISTINCT SUM("TAM_PF_OS_CFFTB005") from "CFFTB005_OS" WHERE "DATA_PGTO_OS_CFFTB005" IS NOT NULL) AS TotalPontosFuncaoContratadoOSPagos 
FROM "CFFTB004_ASC" 
NATURAL JOIN "CFFTB003_CONTRATOS" ,"CFFTB005_OS" , "CFFTB008_SERVICOS","CFFTB002_UNIDADES"

WHERE "NUM_CONTRATO_CFFTB003"="NUM_CONTRATO_CFFTB004"  
AND "COD_ASC_CFFTB004" = "NUM_ASC_CFFTB005" 
AND "NUM_OS_CFFTB005" = "FK_NUM_OS_CFFTB008"  
AND "CNPJ_CFFTB002" = "CNPJ_UND_CFFTB003" 
GROUP BY "TOT_PF_CONTRATO_CFFTB003", "VALOR_PF_CFFTB003"

Ela só volta um contato pois somente 1 registro tem todos os campos do WHERE preenchidos, mas deveria trazer 2 com alguns campos com o valor 0.

4 Respostas

cicerogomes

usa o NVL com subquerys :slight_smile:

pmlm

Mas o que pretendes afinal? Que devolva registos que não obedeçam aos critérios do WHERE?

satangoss

pmlm:
satangoss:

Ela só volta um contato pois somente 1 registro tem todos os campos do WHERE preenchidos, mas deveria trazer 2 com alguns campos com o valor 0.

Mas o que pretendes afinal? Que devolva registos que não obedeçam aos critérios do WHERE?

Pmln Gostaria de buscar os dois registros que existem, porém a busca traz apenas um porque o segundo não tem dados no “NUM_OS_CFFTB005” e por isso não volta o resultado, mas se retirar essa considão

ele devolve dois registro e preenche com dados do 1º registro os campos que o 2º não tem, por exemplo:

3600;277.77;310;12395.1;37185.2;188;60 3600;300;250;12395.1;37185.2;188;60
e deveria trazer o seguinte:

3600;277.77;310;12395.1;37185.2;188;60 3600;300;250;0;0;0;0
Ou seja mesmo se não existe um dado ele deve trazer os valores não existentes com 0, e não omitir toda a linha como na 1º pesquisa.

pmlm

Se percebi o que queres, basta um OUTER JOIN com a tabela CFFTB005_OS

Criado 23 de novembro de 2010
Ultima resposta 24 de nov. de 2010
Respostas 4
Participantes 3