none
Update RRS feed

  • Pergunta

  • Bom dia.

    tenho a seguinte query para fazer um update de uma tabela 'CSUP':

    DECLARE @cli varchar(60) = 'SUP1187';
    
    update csup set u_horgas = (select Sum(mh.u_hdiscont) from pa
    join mh on mh.nopat = pa.nopat
    left join csup on csup.csupstamp = mh.csupstamp where csup.descricao= @cli) 
    where csup.descricao = @cli

    Esta Query faz o update da forma pretendida no entanto tenho de atribuir o valor à variável @cli de forma manual.

    Necessitava de fazer uma alteração para que a variável @cli fosse buscar cada linha da tabela 'CSUP'.

    Podem ajudar?

    Obrigado

    quinta-feira, 9 de agosto de 2018 10:34

Respostas

Todas as Respostas

  • Nuno Morgado,

       Desculpe, não seria o caso de fazer um SELECT na cláusula WHERE?
       Exemplo:

    ========================================================
    SELECT * FROM Individual
    INNER JOIN Publisher
    ON Individual.IndividualId = Publisher.IndividualId
    WHERE Individual.IndividualId = (SELECT someID FROM table WHERE blahblahblah)
    ========================================================
    Using SELECT in the WHERE clause of another SELECT
    https://dba.stackexchange.com/questions/33553/using-select-in-the-where-clause-of-another-select
    ========================================================

       Por favor, veja esse exemplo:

    ========================================================
    SELECT Id, ProductName, UnitPrice
      FROM Product
     WHERE UnitPrice NOT IN (10,20,30,40,50)
    ========================================================

       Substituindo por:

    ========================================================
    SELECT Id, FirstName, LastName, Country
      FROM Customer
     WHERE Country IN 
           (SELECT Country 
              FROM Supplier) 
    ========================================================
    SQL WHERE IN Clause
    https://www.dofactory.com/sql/where-in
    ========================================================

    []'s,
    Fabio I.

    quinta-feira, 9 de agosto de 2018 11:45
  • Boa tarde Fabio,

    Obrigado pela resposta o entanto não estou a conseguir o pretendido.

    dou um exemplo do que necessito fazer:

    Tabela CSUP:

    ID descricao datai nome no u_horgas
    1  SUP1001 2018-01-01 CLIENTE 1001 1001  3.75
    2  SUP1001_1  2018-08-01 CLIENTE 1001 1001  0.00
    3  SUP1002 2018-04-01  CLIENTE 1002 1002  70.00
    4  SUP1003 2018-08-01 CLIENTE 1003 1003  0.00
    5  SUP1005 2018-01-01  CLIENTE 1005 1005  0.33
    6  SUP1006 2018-05-01  CLIENTE 1006 1006  1.51

     

    Tabela pa:

    ID Nome  nopat no csupdescricao
    1 CLIENTE 1002 24 1002 SUP1001_1
    2 CLIENTE 1004 150 1004
    3 CLIENTE 1002 362 1002 SUP1002
    4 CLIENTE 1002 376 1002 SUP1002
    5 CLIENTE 1002 468 1002 SUP1002
    6 CLIENTE 1001 767 1001 SUP1001
    7 CLIENTE 1006 777 1006 SUP1006

    Tabela MH:


    ID nome nopat no csupdescricao u_hdiscont
    1 CLIENTE 1002 24 1002 SUP1002 6.50
    2 CLIENTE 1004 150 1004   1.42
    3 CLIENTE 1006 362 1006 SUP1006 0.50
    4 CLIENTE 1006 376 1006 SUP1006 0.17
    5 CLIENTE 1006 468 1006 SUP1006 0.17
    6 CLIENTE 1006 468 1006 SUP1006 0.17
    7 CLIENTE 1006 468 1006 SUP1006 0.50
    8 CLIENTE 1001 767 1001 SUP1001 0.33
    9 CLIENTE 1006 777 1006 SUP1006 2.67

    O que necessito é atualizar o campo u_horgas da tabela CSUP com o somatório do campo u_hdiscont da tabela MH em que o campo csup.descricao for igual a mh.csupdescricao.

    Com a query inicial eu consigo efetuar este update no entanto é um a um o que dado a quantidade de registos é inviável.

    Tentei com a sua sugestão no entanto não consegui.
    Tem como?
    Obrigado.

    quinta-feira, 9 de agosto de 2018 14:31
  • Bom dia,

    Nuno, considerando o seu Update inicial, experimente fazer uns testes dessa forma:

    update csup 
    set u_horgas = 
        (select Sum(mh.u_hdiscont) 
         from pa
         inner join mh on mh.nopat = pa.nopat
         where mh.csupstamp = csup.csupstamp)
    from csup
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 9 de agosto de 2018 14:38