GARANTIR DESCONTO

Fórum Ajuda com query #357554

24/04/2008

0

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

Paulo

Responder

Posts

24/04/2008

Tiagotecchio

tentou com uma stored procedure? Se vc utilizar o for..into..do com um contador dá pra fazer tranquilo.


Responder

Gostei + 0

24/04/2008

Paulo

Como assim?


Responder

Gostei + 0

24/04/2008

Tiagotecchio

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.


Responder

Gostei + 0

24/04/2008

Tiagotecchio

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



Responder

Gostei + 0

24/04/2008

Tiagotecchio

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
---------------------------------



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar