Clipper On Line • Ver Tópico - Atualizar tabela com base em outra

Atualizar tabela com base em outra

Discussão sobre SQL

Moderador: Moderadores

 

Atualizar tabela com base em outra

Mensagempor JoséQuintas » 10 Jun 2020 12:45

Este deu trabalho, porque não se trata de apenas um.
Ainda mais chegando emails de erro um atrás do outro.
Parece que deu certo.

   WITH OBJECT cnSQL
      :cSQL := "UPDATE JPPEDIDO" + ;
         " JOIN" + ;
         ;
         " ( SELECT SUM( IPISSBAS ) AS ISSBAS, SUM( IPISSVAL ) AS ISSVAL, " + ;
         " SUM( IPIIBAS ) AS IIBAS, SUM( IPIIVAL ) AS IIVAL, " + ;
         " SUM( IPIPIBAS ) AS IPIBAS, SUM( IPIPIVAL ) AS IPIVAL, " + ;
         " SUM( IPICMBAS ) AS ICMBAS, SUM( IPICMVAL ) AS ICMVAL, " + ;
         " SUM( IPFCPVAL ) AS FCPVAL, SUM( IPSUBBAS ) AS SUBBAS, " + ;
         " SUM( IPSUBVAL ) AS SUBVAL, " + ;
         " SUM( IPDIFVALI ) AS DIFVALI, SUM( IPDIFVALF ) AS DIFVALF, " + ;
         " SUM( IPPISBAS ) AS PISBAS, SUM( IPPISVAL ) AS PISVAL," + ;
         " SUM( IPCOFBAS ) AS COFBAS, SUM( IPCOFVAL ) AS COFVAL," + ;
         " SUM( IPVALNOT ) AS VALNOT, SUM( IPICSBAS ) AS ICSBAS," + ;
         " SUM( IPICSVAL ) AS ICSVAL, SUM( IPVALADU ) AS VALADU," + ;
         " SUM( IPVALIOF ) AS VALIOF, SUM( IPIMPVAL ) AS IMPVAL," + ;
         " SUM( IPVALCUS ) AS VALCUS" + ;
         " FROM JPITPED" + ;
         " WHERE IPPEDIDO = " + NumberSQL( nIdPedido ) + ;
         " GROUP BY IPPEDIDO ) AS TEMP" + ;
         ;
         " SET PDISSBAS = TEMP.ISSBAS, PDISSVAL = TEMP.ISSVAL," + ;
         " PDIIBAS = TEMP.IIBAS, PDIIVAL = TEMP.IIVAL," + ;
         " PDIPIBAS = TEMP.IPIBAS, PDIPIVAL = TEMP.IPIVAL," + ;
         " PDICMBAS = TEMP.ICMBAS, PDICMVAL = TEMP.ICMVAL," + ;
         " PDFCPVAL = TEMP.FCPVAL, PDSUBBAS = TEMP.SUBVAL," + ;
         " PDSUBVAL = TEMP.SUBVAL, PDDIFVALI = TEMP.DIFVALI," + ;
         " PDDIFVALF = TEMP.DIFVALF, PDPISBAS = TEMP.PISBAS," + ;
         " PDPISVAL = TEMP.PISVAL, PDCOFBAS = TEMP.COFBAS," + ;
         " PDCOFVAL = TEMP.COFVAL, PDVALNOT = TEMP.VALNOT," + ;
         " PDICSBAS = TEMP.ICSBAS, PDICSVAL = TEMP.ICSVAL," + ;
         " PDVALADU = TEMP.VALADU, PDVALIOF = TEMP.VALIOF," + ;
         " PDIMPVAL = TEMP.IMPVAL, PDVALCUS = TEMP.VALCUS" + ;
         " WHERE JPPEDIDO.IDPEDIDO = " + NumberSQL( nIdPedido )
      :ExecuteCmd()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18148
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Atualizar tabela com base em outra

Mensagempor JoséQuintas » 10 Jun 2020 12:57

Deixando os cálculos pro MySQL.
Talvez depois transformar em stored procedure.

Precisa muito cuidado, porque qualquer erro pode ser fatal, por exemplo, esquecer do WHERE, e atualizar todos os pedidos de uma vez.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18148
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Atualizar tabela com base em outra

Mensagempor JoséQuintas » 10 Jun 2020 13:02

reforçar isso, pra quem está iniciando:

No Clipper/Harbour REPLACE VAR WITH 1 troca só o registro atual.

No MySQL; UPDATE PEDIDOS SET VALOR = 5... isso troca TUDO

Comparado ao Clipper/Harbour, digamos que "ALL" é o default, igual REPLACE ALL
Então, OBRIGATORIAMENTE, SEMPRE tem que definir o alcance dos comandos.
Um errinho desses.... e lá se foi a base de dados...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18148
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro