表结构是这样的
TABLE_A:
AR1,  AR2,  AR3 … AR12 (一共12个,代表12个月)TABLE_B
B_N,  B_MONTH,  B_VALUE (一共3个,)
TABLE_C
AR1,  AR2,  AR3 … AR12 (一共12个,和TABLE_A结构一样)想把TABLE_A备份到TABLE_C中
条件如下:①取出 TABLE_A 中最大的值和TABLE_B的B_VALUE相乘②
如果TABLE_B的B_N =1
那么备份时月份排列如下
AR1   AR2  AR3  AR4  AR5 …   AR12
4月   5月  6月  7月  8月      第二年3月如果TABLE_B的B_N =2
AR1   AR2  AR3    AR4        AR5 …   AR12
10月  11月 12月   第二年1月  2月      9月③根据B_MONTH的值(月份),结合上面的月数分布,把①取得值,放入TABLE_C
相应列中。比如B_MONTH是5月,B_N=1
那么①取得值放入TABLE_C的AR2这列中。哎...

解决方案 »

  1.   

    说的确实有些不明白
    ①取出 TABLE_A 中最大的值和TABLE_B的B_VALUE相乘
    1.此最大值是纵向比还是横向比,如果是纵向比则以哪一列来比
    2.TABLE_B是否只有一行,如果不止一行你要取哪一行的值来相乘
    ...
      

  2.   

    对不起有些地方没说明白
    TABLE_A:
    id,  AR1,  AR2,  AR3 … AR12 (一共13个字段,AR1-AR12代表12个月的销售额)TABLE_B:
    id,  B_N,  B_MONTH,  B_VALUE (一共4个字段,B_N:指定标示 
                                                  B_MONTH :指定月份 
                                                  B_VALUE :指定百分比)TABLE_A 和TABLE_B以id关连。
    比如下这条记录:
    TABLE_A:                         TABLE_B:
    id,  AR1,  AR2,  AR3 … AR12    id,  B_N,  B_MONTH,  B_VALUE 
    1    100    200    300    1200    1    1      12         30%①取出 TABLE_A 中最大的值和TABLE_B的B_VALUE相乘:  1200*30%②
    如果TABLE_B的B_N =1
    那么备份时月份排列如下
    AR1   AR2  AR3  AR4  AR5 …   AR12
    4月   5月  6月  7月  8月      第二年3月如果TABLE_B的B_N =2
    AR1   AR2  AR3    AR4        AR5 …   AR12
    10月  11月 12月   第二年1月  2月      9月③根据B_MONTH的值(月份),结合上面的月数分布,把①取得值,放入TABLE_C
    相应列中。比如上面那条记录:
    如果B_MONTH是1月,B_N=2,那么1200*30%这个值就要放到 TABLE_C 的 AR4 这列中。不知道说没说清楚
      

  3.   

    见下面的代码。CREATE Function colmax(
    @i1  int,
    @i2  int)
    RETURNS int
    BEGIN
    IF @i1>@i2
    RETURN @i1
    ELSE
    RETURN @i2
    END
    GODECLARE tb_cursor CURSOR
    FOR SELECT id,B_N,B_MONTH,colmax(colmax(colmax(colmax(colmax(colmax(colmax(colmax(colmax(colmax(colmax(ar1,ar2),ar3),ar4),ar5),ar6),ar7),ar8),ar9),ar10),ar11),ar12) * B_VALUE as maxar 
    FROM TABLE_A,TABLE_B
    WHERE TABLE_A.ID=TABLE_B.IDDECLARE @id int
    DECLARE @N int
    DECLARE @month int
    DECLARE @maxar int
    DECLARE @sql varchar(255)OPEN tb_cursor FETCH NEXT FROM tb_cursor 
    INTO @id, @N, @month, @maxarIF @@FETCH_STATUS <> 0 
    PRINT '         <<None>>'     WHILE @@FETCH_STATUS = 0
    BEGIN SET @sql = "UPDATE TABLE_C SET AR" +
    Convert(varchar(2),
    CASE 
    WHEN @N=1 THEN (B_MONTH+8)%12 +1
    WHEN @N=2 THEN (B_MONTH+2)%12 +1
    END)
    + " = " + @maxar + " WHERE ID =" +@id;
            EXEC @sql
    FETCH NEXT FROM tb_cursor INTO @id, @N, @monthENDCLOSE tb_cursor 
    DEALLOCATE tb_cursor
      

  4.   

    半天没有人回答,故模是都没看明白,从新总结一下TABLE_A:
    id,  AR1,  AR2,  AR3 … AR12 (一共13个字段,AR1-AR12代表12个月的销售额)TABLE_B:
    id,  B_N,  B_MONTH,  B_VALUE (一共4个字段,B_N:指定标示 
                                                  B_MONTH :指定月份 
                                                  B_VALUE :指定百分比)TABLE_C
    id,  AR1,  AR2,  AR3 … AR12 (一共13个,和TABLE_A结构一样)想把 TABLE_A 备份到 TABLE_C 中条件如下:TABLE_A 和TABLE_B以id关连。
    比如像下面这条记录:
    TABLE_A:                                 TABLE_B:
    id,    AR1,   AR2,   AR3 …  AR12       id,  B_N,  B_MONTH,  B_VALUE 
    1      100     200     300     1200       1    2      1月        30%①取出 TABLE_A 中最大的值和TABLE_B的B_VALUE相乘:  1200*30%②
    如果TABLE_B的B_N =1
    那么备份时月份排列如下
    AR1   AR2  AR3  AR4  AR5 …   AR12
    4月   5月  6月  7月  8月      第二年3月如果TABLE_B的B_N =2
    AR1   AR2  AR3    AR4        AR5 …   AR12
    10月  11月 12月   第二年1月  2月      9月③根据B_MONTH的值(月份),结合上面的月数分布,把①取得值,放入TABLE_C
    相应列中。比如上面那条记录:
    B_MONTH是1月,B_N=2,那么1200*30%这个值就要放到 TABLE_C 的 AR4 这列中。
      

  5.   

    看了你的说明,脑袋很大啊:1.从A表中的每行记录中取出最大值与B表中对应的值相乘2.将结果有选择的存放到相应的位置这个操作比较绕,建议用SQL的游标来实现,如果仅用一条或两条语句可能很难实现
      

  6.   

    是的用游标,因为实现第三个要求的SQL语句要动态生成(原因是操作的字段是不固定的。),只能一个记录一个记录的生成后执行。