SubSelect retornando null
Pessoal estou com um problema
Estou tentando fazer um sql para selecionar a qtde de itens vendidos preciso somar nf + cupom.
Exemplo:
SELECT P.CODIGO,
(SELECT SUM(QTDE) FROM ITEMNF WHERE PRODUTO = P.CODIGO) ,
(SELECT SUM(QTDE) FROM ITEMCUPOM WHERE PRODUTO = P.CODIGO) FROM PRODUTO P
este me retorna uma coluna para cada total, mas eu gostaria que o retorno fosse em somente uma coluna.
Exemplo:
SELECT P.CODIGO,
(SELECT SUM(QTDE) FROM ITEMNF WHERE PRODUTO = P.CODIGO) +
(SELECT SUM(QTDE) FROM ITEMCUPOM WHERE PRODUTO = P.CODIGO) FROM PRODUTO P
mas neste caso se em uma das duas tabelas não houver ocorrencias vai me retornar ´null´.
Preciso encontrar uma solução.
[]Edison de Brito
Estou tentando fazer um sql para selecionar a qtde de itens vendidos preciso somar nf + cupom.
Exemplo:
SELECT P.CODIGO,
(SELECT SUM(QTDE) FROM ITEMNF WHERE PRODUTO = P.CODIGO) ,
(SELECT SUM(QTDE) FROM ITEMCUPOM WHERE PRODUTO = P.CODIGO) FROM PRODUTO P
este me retorna uma coluna para cada total, mas eu gostaria que o retorno fosse em somente uma coluna.
Exemplo:
SELECT P.CODIGO,
(SELECT SUM(QTDE) FROM ITEMNF WHERE PRODUTO = P.CODIGO) +
(SELECT SUM(QTDE) FROM ITEMCUPOM WHERE PRODUTO = P.CODIGO) FROM PRODUTO P
mas neste caso se em uma das duas tabelas não houver ocorrencias vai me retornar ´null´.
Preciso encontrar uma solução.
[]Edison de Brito
Edison_br
Curtidas 0
Respostas
Gandalf.nho
16/02/2005
Se estiver usando FB 1.5, tente usar a função COALESCE
GOSTEI 0
Edison_br
16/02/2005
Estou utilizando ib 6.0.2 já pesquisei em diversos locais e nada, infelizmente vou ter que fazer uma gambia, gambiarra, matação, nó de loco...
GOSTEI 0
Afarias
16/02/2005
vc pode neste caso usar uma Procedure ou uma UDF (NVL)
T+
T+
GOSTEI 0
Edison_br
16/02/2005
No caso de se utilizar uma procedure, como seria o procedimento
1 - Crio a procedure com duas variaveis cada uma com a soma de uma das tabelas e faço a verificação (IF) do valor se não for null alimento uma terceira variavel (output)?
2 - Mas como ficaria isto pois até onde sei eu não posso colocar um EXECUTE PROCEDURE em um select;
1 - Crio a procedure com duas variaveis cada uma com a soma de uma das tabelas e faço a verificação (IF) do valor se não for null alimento uma terceira variavel (output)?
2 - Mas como ficaria isto pois até onde sei eu não posso colocar um EXECUTE PROCEDURE em um select;
GOSTEI 0
Afarias
16/02/2005
|1 - Crio a procedure com duas variaveis cada uma com a soma de uma
|das tabelas e faço a verificação (IF) do valor se não for null alimento
|uma terceira variavel (output)?
por ai... seria algo como:
if (val1 is null) then
val1 = 0;
if (val2 is null) then
val2 = 0;
resposta = val1 + val2;
|2 - Mas como ficaria isto pois até onde sei eu não posso colocar um
|EXECUTE PROCEDURE em um select;
então vc usa o procedimento na forma:
T+
|das tabelas e faço a verificação (IF) do valor se não for null alimento
|uma terceira variavel (output)?
por ai... seria algo como:
if (val1 is null) then
val1 = 0;
if (val2 is null) then
val2 = 0;
resposta = val1 + val2;
|2 - Mas como ficaria isto pois até onde sei eu não posso colocar um
|EXECUTE PROCEDURE em um select;
set term ^; create procedure SaidasProdutos returns (produto varchar(10), total integer) as declare variable sub1 integer; declare variable sub1 integer; begin for SELECT P.CODIGO, (SELECT SUM(QTDE) FROM ITEMNF WHERE PRODUTO = P.CODIGO) , (SELECT SUM(QTDE) FROM ITEMCUPOM WHERE PRODUTO = P.CODIGO) FROM PRODUTO P into :produto, :sub1, :sub2 do begin if (sub1 is null) then sub1 = 0; if (sub2 is null) then sub2 = 0; total = sub1+sub2; suspend; end end^
então vc usa o procedimento na forma:
select * from SaidasProdutos;
T+
GOSTEI 0
Edison_br
16/02/2005
Simplesmente perfeito, era bem isto que eu precisava.
Obrigado pela atenção.
Edison de Brito
Obrigado pela atenção.
Edison de Brito
GOSTEI 0