代码之家  ›  专栏  ›  技术社区  ›  Biswa

基于SQL Server中另一列值的条件返回更新的列值

  •  1
  • Biswa  · 技术社区  · 7 年前

    Referrals 使用以下列:

    • ref_id
    • referrer_id(same as profile id)
    • referrer_bonus_amount
    • referral_valid
    • valid_from
    • valid_till

    我需要编写代码来扩展 有效期至 已转介两次以上的租户的一个月日期。引用的数量可以通过特定数量的出现次数来计算( profile_id )在列中 referrer_id (与配置文件id相同)。下面两段代码分别完成各自的工作,但我不知道如何将它们连接起来以获得所需的结果。

    select DATEADD(mm, 1, valid_till)
    from Referrals
    
    select 
        [referrer_id(same as profile id)], 
        count([referrer_id(same as profile id)]) 
    from referrals
    group by [referrer_id(same as profile id)]
    having count([referrer_id(same as profile id)]) > 2
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Mureinik    7 年前

    你可以使用 in 操作员:

    SELECT DATEADD(MM, 1, valid_till) 
    FROM   referrals
    WHERE  referrer_id IN (SELECT   referrer_id
                           FROM     referrals
                           GROUP BY referrer_id
                           HAVING   COUNT(*) > 2)
    

    或者,如果您真的需要更新表,而不仅仅是查询添加的月份,您可以在 update 声明:

    UPDATE referrals 
    SET    valid_till = DATEADD(MM, 1, valid_till) 
    WHERE  referrer_id IN (SELECT   referrer_id
                           FROM     referrals
                           GROUP BY referrer_id
                           HAVING   COUNT(*) > 2)
    
        2
  •  0
  •   Gordon Linoff    7 年前

    join . 但是,我不确定表之间匹配的确切条件是什么:

    select DATEADD(month, 1, valid_till)
    from Referrals r join
         (select [referrer_id(same as profile id)], count([referrer_id(same as profile id)]) 
          from referrals
          group by [referrer_id(same as profile id)]
          having count([referrer_id(same as profile id)]) > 2
         ) rr
         on rr.ref_id = [referrer_id(same as profile id)];