none
Pesquisar uma determinada coluna da primeira linha for igual a algum valor RRS feed

  • Pergunta

  • Caros,

    eu tenho uma proposta, e dentro dela uma relacionamento onde tem N parcelas, estas podem ser parcelas do tipo, ato, repasse, mensal e etc.

    porém eu preciso fazer um select  onde uma coluna da primeira linha seja diferente de ato (1), tentei usar o top 1 , porém top1 traz apenas uma linha...

    como pode ser feito?

    obrigado

    segunda-feira, 27 de fevereiro de 2012 17:45

Todas as Respostas

  • Não entendi sua pergunta Edilson. Pode exemplificar?

    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert

    segunda-feira, 27 de fevereiro de 2012 18:16
  • Opa Weslley,

    Eu tenho 3 propostas:

    a , b e c.

    A contém os registro de parcela do tipo , Ato, Anual , Repasse

    B contém os registro de parcela do mesmo tipo porém em ordem cadastrada em inverso Anual, Ato, Repasse

    C contém os registro de parcela do mesmo tipo porém em ordem cadastrada em inverso Repasse, Anual, Ato

    Eu quero no meu select retornar apenas os registros cujo a proposta contenha apenas a primeira linha de relacionamento diferente de ATO.

    espero q tenha ficado claro agora :-)

    obrigado

    segunda-feira, 27 de fevereiro de 2012 18:35
  • Agora sim.
    E existe um SEQUENCIAL de cadastro da tabela de parcela pra nos ajudar?

    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert

    segunda-feira, 27 de fevereiro de 2012 18:55
  • hehehehe, se tivesse seria moleza hehehe, mas não
    segunda-feira, 27 de fevereiro de 2012 19:09
  • Edilson

    Tenho uma ideia, mas preciso que você poste as estruturas das tabelas envolvidas, quem é a pk da tabela de parcelas?


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 27 de fevereiro de 2012 19:45
    Moderador
  • Segue um exemplo

    declare @tbProposta as table (idProposta int, dsProposta char(1))
    insert into @tbProposta values (1,'A'),(2,'B'),(3,'C')
    declare @tbParcela as table (idProposta int, tipo varchar(10))
    insert into @tbParcela values (1,'Ato'),(1,'Anual'),(1,'Repasse'),
    (2,'Anual'),(2,'Ato'),(2,'Repasse'),
    (3,'Repasse'),(3,'Anual'),(3,'Ato')
    ;with cte_dados
    as
    (select a.idProposta, a.dsProposta, b.tipo,row_number() over(partition by b.idProposta order by b.idProposta) as numerador
    from @tbProposta a inner join @tbParcela b on a.idProposta=b.idProposta
    )
    select idProposta, dsProposta, tipo from cte_dados 
    except
    select idProposta, dsProposta, tipo from cte_dados where numerador=1 and tipo='ato'


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 27 de fevereiro de 2012 20:02
    Moderador
  • Depois nos informe se o exemplo do Marcelo resolveu! Se não, agente pensa em outra solução, mas creio que resolve sim!

    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert

    segunda-feira, 27 de fevereiro de 2012 20:14
  • Marcelo,

    obrigado, acho que o caminho é este mas veja só, eu fiz algo errado, assim:

    ;with cte_dados
    as
    (select f.gaf_propostaid, f.gaf_tipoparcela, row_number() over(partition by f.gaf_propostaid order by
    f.gaf_propostaid) as numerador from Gaf_propostafinanceiro f )
    select gaf_propostaid  from cte_dados 
    except select gaf_propostaid from cte_dados where numerador =1 and Gaf_TipoParcela <> 1

    deste jeito esta me trazendo apenas as propostas que contém apenas a parcela do tipo 1 Ato.

    obrigado,

    segunda-feira, 27 de fevereiro de 2012 20:24
  • Então Edilson, justamente por isto que queria ver as estruturas da tabela

    o Propostaid é PK?

    posta alguns exemplos de como estão os dados da tabela GAf_popostafinanceiro


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 27 de fevereiro de 2012 22:31
    Moderador
  • Olá Marcelo,

    desculpe estar responde só agora, ontem estava sem 3g, wifi na facul e ai só vi o post hoje pela manhã, vou passar somente alguns campos das duas tabelas

    Tabela

    Nome:Quote

    Campo: QuoteId PK (Guid)

    CAmpo: QuoteNumber

    Tabela:Gaf_PropostaFinanceiro

    Campo:Gaf_PropostaFinanceiroId PK(Guid)

    Campo:Gaf_PropostaId FK (Guid) references Quote on QuoteId

    Campo:Gaf_TipoParcela (Int)

    são estes campos, tem muito mais, mas estes que me interessam para esta consulta, na verdade acho q da pra fazer só com a segunda tablea. (gaf_propostafinanceiro).

    abraços e obrigado

    terça-feira, 28 de fevereiro de 2012 12:10
  • Edilson

    testa assim

    ;with cte_dados
    as
    (select f.gaf_propostaid, f.gaf_tipoparcela, row_number() over(partition by f.gaf_propostaid order by
    f.gaf_propostaid) as numerador from Gaf_propostafinanceiro f 
    )
    select gaf_propostaid  from cte_dados 
    except 
    select gaf_propostaid from cte_dados where numerador =1 and Gaf_TipoParcela = 1

    Qual o datatype da coluna gaf_propostaid? se for uniqueidentifier você poderá ter um problema, pois o plano de execução poderá usar a PK para organizar os registros, ou seja a ordem que vc inseriu não será a ordem apresentada... mas testa ae....


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    terça-feira, 28 de fevereiro de 2012 12:55
    Moderador
  • Opa,

    então,não deu certo, deve ser pelo uniqueidentifier mesmo, ai ferrou, acho q somente fazendo um cursor e inserindo em uma tabela temporaria onde crio um campo do tipo int, e ai pesquiso sem ordernar por nada e então deve trazer do jeito q foi inserido, e então fazer este seu comando, o que acha?

    tens algum exeplo de cursor inserindo em tabela temporaria?

    obrigado

    terça-feira, 28 de fevereiro de 2012 14:07
  • Edilson

    também não vai dar certo... pois ao pesquisar na tabela fisica e inserir na temporária o SQL vai usar a ordenação da PK que vai bagunçar a ordem em que foi inserida, para acertar este problema você deverá alterar sua tabela, inserindo um campo indentity ou um campo dtCadastro onde vc pode ordernar por um destes campos o que vai lhe garantir a ordem de inserção.


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    terça-feira, 28 de fevereiro de 2012 14:43
    Moderador
  • Puxa Marcelo, uma pena, pois não posso mudar o tipo de dados, estas tabelas são do Dynamics CRM que trabalho, e isto é autoconfigurável e não pode ser mexido por práticas da microsoft, aquela coisa toda...

    mas pera ai, eu tenho um campo que armazena a data de alteração / inserção será que não da pra usar ele?

    terça-feira, 28 de fevereiro de 2012 14:45