none
Query com Select e update com condicional RRS feed

  • Pergunta

  • Bom dia !

    Preciso fazer um consulta de atualização antes de gerar o gráfico no sistema, com as seguintes condições: Se em uma família, existir pelos um inscrito matriculado, o campo gráfico receberá sim, mas se todos os incristos não estiverem matriculados o campo gráfico receverá não.

    Tentei elaborar uma consulta para atualizar com sim, mas mesmo assim deu errado. Podem me ajudar, não sei será nexessário uma procedure ou function. Veja o meu código. Estou usando o access 2010. Agradeço desde já.

    UPDATE Tb_familia SET Tb_familia.Grafico = "Sim"
    WHERE EXISTS (SELECT  Tb_Inscrito.matriculado
    FROM Tb_Familia INNER JOIN Tb_Inscrito ON Tb_Familia.[Cod_Faml] = Tb_Cadt_Inscrito.[Cod_Faml]
    WHERE (((Tb_Cadt_Inscrito.Matriculado)="Sim")););


    sexta-feira, 1 de maio de 2015 11:08

Todas as Respostas

  • Cara, faz primeiro uma subquery com um count de matriculado = "sim" da tabela inscrito, trazendo no select o cod_faml.

    Usa essa subquery como como inner join para fazer o update.

    sexta-feira, 1 de maio de 2015 15:04
  • Leandrobmb,

    Um pergunta: Qual é a versão do SQL Server que você esta utilizando?

    Se for 2012 ou 2014 poderá fazer uso do comando IIF dentro de um Select, caso contrário terá que fazer uso do IF em condições separadas.

    Minha sugestão é realizar todas as análises e condições de forma individual para não gerar em algum momento no processamento do seu código possíveis lock ou até mesmo looping infinitos.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 1 de maio de 2015 23:59
  • Obrigado Juliano, porém não deu certo ainda, todos campos gráficos estão recebendo "Sim".

    Assim ficou a query, após sua sugestão.

    UPDATE Tb_Cadt_Familia SET Tb_Cadt_Familia.Grafico_Familia_Sim_Não = "Sim"
    WHERE EXISTS (SELECT DISTINCTROW Tb_Cadt_Familia.Cod_Faml, 
    FROM Tb_Cadt_Familia INNER JOIN Tb_Cadt_Inscrito ON Tb_Cadt_Familia.[Cod_Faml] = Tb_Cadt_Inscrito.[Cod_Faml]
    GROUP BY Tb_Cadt_Familia.Cod_Faml
    HAVING (((First(Tb_Cadt_Inscrito.Matriculado))="Sim")););


    domingo, 3 de maio de 2015 11:44
  • Leandrobmb,

    Então, mas verifique a sua condição na linha do Where, você esta fazendo uso do comando Exists, onde o SQL Server será obrigado a retornar os registros que existem dentro do Select que você esta declarando na subquery, será que isso não sendo justamente o seu problema?


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 6 de maio de 2015 18:25