Sql 使用select语句更新列

Sql 使用select语句更新列,sql,select,firebird,Sql,Select,Firebird,我想根据select语句的结果更新列。如果您在下面找到我的查询,我的代码无法正常工作: 我在所有列上都得到相同的数据 update ACHATS b set QUANTITE=(select sum(QUANTITE) from ACHAT_DETAILS a where a.NUMERO_D_ACHAT=(SELECT max(ID_ACHAT) M_ID_ACHAT from ACHATS) group by a.NUMERO_D_ACHAT) , PRIX_HT=(selec

我想根据select语句的结果更新列。如果您在下面找到我的查询,我的代码无法正常工作: 我在所有列上都得到相同的数据

update ACHATS  b set 
QUANTITE=(select sum(QUANTITE)     from ACHAT_DETAILS a where a.NUMERO_D_ACHAT=(SELECT max(ID_ACHAT) M_ID_ACHAT from ACHATS) 
group by a.NUMERO_D_ACHAT) ,
PRIX_HT=(select sum(PRIX_HT)       from ACHAT_DETAILS a where a.NUMERO_D_ACHAT=(SELECT max(ID_ACHAT) M_ID_ACHAT from ACHATS) 
group by a.NUMERO_D_ACHAT),
PRIX_TTC=(select sum(PRIX_HT) from ACHAT_DETAILS a where a.NUMERO_D_ACHAT=(SELECT max(ID_ACHAT) M_ID_ACHAT from ACHATS) 
group by a.NUMERO_D_ACHAT);

因此,要测试这一点,请尝试下面的代码,看看这是否是您希望用于首先更新表的结果:

   WITH B AS (
    SELECT  MAX(M_ID_ACHAT) AS NUMERO_D_ACHAT
          , SUM(QUANTITE) AS QUANTITE
          , SUM(PRIX_HT) AS PRIX_HT
          , SUM(PRIX_TTC) AS PRIX_TTC
    FROM    ACHAT_DETAILS
    GROUP BY 
        MAX(M_ID_ACHAT)
    )


SELECT
    b.QUANTITE
    ,b.PRIX_HT
    ,b.PRIX_TTC
FROM ACHAT_DETAILS a
JOIN  b
    ON a.NUMERO_D_ACHAT = b.NUMERO_D_ACHAT
接下来,如果所有这些看起来都不错,那么您可以运行这个(我想我的语法是正确的):


该问题的正确更新查询为:

update ACHATS b set 
  QUANTITE = (select sum(QUANTITE)
                from ACHAT_DETAILS a 
                where a.NUMERO_D_ACHAT = (
                  select max(ID_ACHAT)
                    from ACHATS)
             ),
  PRIX_HT = (select sum(PRIX_HT)
               from ACHAT_DETAILS a 
               where a.NUMERO_D_ACHAT = (
                 select max(ID_ACHAT)  
                   from ACHATS)
            ),
  PRIX_TTC = (select sum(PRIX_HT)  
                from ACHAT_DETAILS a 
                where a.NUMERO_D_ACHAT = (
                  select max(ID_ACHAT)
                  from ACHATS)
             )
  where b.ID_ACHAT = (select max(ID_ACHAT)
                        from ACHATS)

请提供“无法正常工作”的其他详细信息。你有错误吗?输出是什么?怎么了?期望的输出是什么?没有错误,但所有结果都是相同的,但“结果是相同的”并不能提供信息。也许是这样的:不要给我们调试代码。首先给出示例源数据、您想要得到的结果,以及您的意图的可读描述,以及您希望以这种方式处理数据的原因。当我看你的代码时,我无法读懂你的记忆和想法,这可能不是你想要的。你应该看看语法是不正确的<代码>更新。。。设置FROM…-UPDATE语句中没有FROM子句。也许您想要使用的是合并。Hi Arioch…这确实在运行,我运行了一个测试:-)通过这种方式,您可以使用joinfull查询、firebird版本和屏幕截图过滤结果或更新,如果您愿意的话:我确信您的第二个源文本不完整,并且与您实际运行的内容不完全匹配。或者您使用其他一些RDBMS(非firebird)进行测试,以获得第一个代码的回复,他给出了正确的数据,但第二个代码在firebird上不起作用。给出错误:令牌未知-第5行,第1列。从…起SQL错误(代码=-104):无效令牌。我尝试了,但他不工作(我在Firebird数据库下工作)
update ACHATS b set 
  QUANTITE = (select sum(QUANTITE)
                from ACHAT_DETAILS a 
                where a.NUMERO_D_ACHAT = (
                  select max(ID_ACHAT)
                    from ACHATS)
             ),
  PRIX_HT = (select sum(PRIX_HT)
               from ACHAT_DETAILS a 
               where a.NUMERO_D_ACHAT = (
                 select max(ID_ACHAT)  
                   from ACHATS)
            ),
  PRIX_TTC = (select sum(PRIX_HT)  
                from ACHAT_DETAILS a 
                where a.NUMERO_D_ACHAT = (
                  select max(ID_ACHAT)
                  from ACHATS)
             )
  where b.ID_ACHAT = (select max(ID_ACHAT)
                        from ACHATS)