我有个工资临时表,为方便统计将工资年月分两个字段tmpgzb如下:
姓名(xm)    工资(gz)    年份(LF)     月份(YF)
aaa         1000        2002         12
bbb          987        2002         12
ccc         1388        2002         12
aaa         0           2003          1
bbb         0           2003          1
ccc         0           2003          1
-----------------------------------------------------------
现在想通过一条update语句实现临时表tmpgzb如下:
姓名(xm)    工资(gz)    年份(LF)     月份(YF)
aaa         1000        2002         12
bbb          987        2002         12
ccc         1388        2002         12
aaa         1000        2003          1
bbb          987        2003          1
ccc         1388        2003          1望高手们发言。

解决方案 »

  1.   

    update tmpgzb set gz=:gzparam where xm=aaa and lf=2003
    一条?没试过。我试试?
      

  2.   

    update tmpgzb set gz=(select gz from tmpgzb where xm=xm and lf=2002 and yf=12) where lf=2003 and lf=1
    你试试看。
      

  3.   

    支持 flyingkiller(大飞虫)。
      

  4.   

    update tmpgzb a set a.gz=(select b.gz from tempgzb b where b.yf='12'   and b.xm=a.xm)
      

  5.   

    在书上说UPDATE的WHERE子句使用某个指定行(是指定行!)的一列或多列的值!所以我认为UPDATE实现不了/
      

  6.   

    UPDATE tmpgzb
    SET gz = b.gz
    FROM (SELECT *
           FROM tmpgzb
           WHERE yf = 12) AS b
    WHERE (tmpgzb.yf = 1) AND (tmpgzb.lf = 2003) AND (tmpgzb.xm = b.xm)特别说明字段xm char
    gz int
    lf int 
    yf int
    数据库sql server 2000
    测试通过,不通数据库自己想吧
      

  7.   

    为了更严谨,修改如下:
    UPDATE tmpgzb
    SET gz = b.gz
    FROM (SELECT *
           FROM tmpgzb
           WHERE lf = 2002 and yf = 12) AS b
    WHERE (tmpgzb.yf = 1) AND (tmpgzb.lf = 2003) AND (tmpgzb.xm = b.xm)特别说明字段xm char
    gz int
    lf int 
    yf int
    数据库sql server 2000
    测试通过,不通数据库自己想吧
      

  8.   

    望高手们发言???
    哥们,太简单了吧,,,你用and把你想要的条件都连起来啊,,恕我直言好好学学sql吧,要不加个id减去不必要的麻烦.
      

  9.   

    这样写,试一试吧update tmpgzb set gz=(select distinct gz from tmpgzb b where b.xm=xm and lf=2002 and yf=12) where lf=2003 and lf=1
      

  10.   

    应该是这样的
    update tmpgzb set gz=(select distinct gz from tmpgzb b where b.xm=xm and b.lf=2002 and b.yf=12) where lf=2003 and lf=1