Ajuda com query
Senhores, a query abaixo mostra os itens, a venda e a forma de pagamento. Acontece que eu vendi 4 itens, nessa query, em duas formas de pagamento somente. O que eu gostaria de fazer, se for possível, é trazer os meus 4 itens e somente duas as duas formas, e não repetisse para os outros 2 itens restantes. Se eu vender 10 itens em uma única forma de pagamento, exemplo dinheiro, essa query me lista os dez itens(correto) e dez vezes a palavra dinheiro, qundo eu gostaria de vir somente uma vez e as demais virem nula. tem como? Abaixo a minha query. Delphi 2007, Firebird 2, DBexpress.
SELECT
TB_SAC_NF_ITEM.NU_CX,
TB_SAC_NF_ITEM.NU_NF,
TB_SAC_NF_ITEM.SR_NF,
TB_SAC_NF_ITEM.NU_SEQ_ITEM,
TB_SAC_NF_ITEM.CD_PROD,
TB_SAC_NF_ITEM.DESCRICAO ,
TB_SAC_NF_PAGAMENTO.CD_F_PAG,
TB_SAC_NF_PAGAMENTO.VL_PAG,
TB_SAC_FORMA_PAGTO.DESCRICAO ´FORMA´,
TB_SAC_NF_ITEM.QT_ITEM,
TB_SAC_NF_ITEM.VL_ITEM,
(TB_SAC_NF_ITEM.QT_ITEM*TB_SAC_NF_ITEM.VL_ITEM) AS TOTAL,
CASE TB_SAC_NF_ITEM.ST_CANC
WHEN 0 THEN ´NAO´
WHEN 1 THEN ´SIM´
END ST_CANC
FROM
TB_SAC_NF_CAPEADOR,
TB_SAC_NF_ITEM,
TB_SAC_NF_PAGAMENTO,
TB_SAC_FORMA_PAGTO
WHERE
TB_SAC_NF_ITEM.NU_CX = TB_SAC_NF_CAPEADOR.NU_CX
AND TB_SAC_NF_PAGAMENTO.NU_CX = TB_SAC_NF_CAPEADOR.NU_CX
AND TB_SAC_NF_PAGAMENTO.NU_NF = TB_SAC_NF_CAPEADOR.NU_NF
AND TB_SAC_FORMA_PAGTO.CD_F_PAG = TB_SAC_NF_PAGAMENTO.CD_F_PAG
AND TB_SAC_NF_ITEM.NU_NF = TB_SAC_NF_CAPEADOR.NU_NF
AND TB_SAC_NF_ITEM.SR_NF = TB_SAC_NF_CAPEADOR.SR_NF
AND TB_SAC_NF_CAPEADOR.NU_CX = 1
AND TB_SAC_NF_ITEM.SR_NF = ´D2´
AND TB_SAC_NF_CAPEADOR.NU_NF = 1378
ORDER BY
TB_SAC_NF_ITEM.NU_NF,
TB_SAC_NF_ITEM.NU_SEQ_ITEM
Paulo
Curtidas 0
Respostas
Tiagotecchio
24/04/2008
tentou com uma stored procedure? Se vc utilizar o for..into..do com um contador dá pra fazer tranquilo.
GOSTEI 0
Paulo
24/04/2008
Como assim?
GOSTEI 0
Tiagotecchio
24/04/2008
Simples: crie uma stored procedure com base na query que vc está fazendo. Para isso vc terá que usar um for..into..do com suspend para retornar todas as linhas da query. Até aí é fácil. A única dificuldade é colocar um contador e uma variável para diferenciar a descrição da forma de pagamento.
GOSTEI 0
Tiagotecchio
24/04/2008
Segue um exemplo:
CREATE PROCEDURE SP_TESTE ( parametro integer) returns ( codigo integer, descricao varchar(60), estado varchar(2)) as declare variable aux_str varchar(20); declare variable aux_uni integer; begin AUX_STR = ´´; FOR SELECT CODIGO, DESCRICAO, COALESCE(ESTADO,´´) FROM TABCIDADE /*WHERE CODIGO = :PARAMETRO*/ ORDER BY ESTADO, CODIGO INTO :CODIGO, :DESCRICAO, :ESTADO DO BEGIN if (AUX_STR <> ESTADO) then BEGIN AUX_STR = ESTADO; --ESTADO = AUX_STR; END ELSE BEGIN ESTADO = ´´; END suspend; END END
GOSTEI 0
Tiagotecchio
24/04/2008
E o resultado é esse:
--------------------------------- CODIGODESCRICAOESTADO --------------------------------- 1CAXIAS DO SULRS 2PELOTAS 3FLORIANÓPOLIS 8FLORES DA CUNHA 235SÃO BORJA 4NOVO HAMBURGOSC 5LAGOA VERMELHA 6CANGUCU 7MARMELEIRO 18SANTIAGOSP 29QUATRO BARROS 38NOVA BASSANO ---------------------------------
GOSTEI 0