使用现有字段的If sum条件更新新列

时间:2016-02-04 17:37:02

标签: mysql if-statement case sumifs

unique_id    site      status      Final status
HMEX093     MEX025    Accepted      Incomplete
HMEX093    HMEX056    Accepted      Incomplete
HMEX093     LTY0014   Pending       Incomplete

我想要一个更新查询来更新最终状态列,具体取决于查询状态。 每个unique_id都有多个具有不同状态的站点。 如果条件总和,我想更新最终状态列。 例如。 unique_id HMEX093有3个站点,网站不同。我想检查这些网站的状态,如果网站的总和(状态='已接受')> = 3最终状态列应更新为已批准值。 如果对于unique_id的相应站点存在至少一个待处理状态,则最终状态应更新为不完整,如上所示。 请帮忙。 我尝试使用Case when语句,但没有成功。

1 个答案:

答案 0 :(得分:1)

修改

既然我意识到问题是关于MySQL而不是Excel,我认为类似下面的查询会起作用:

update
  Sites
inner join
(
  select
    s1.unique_id,
    if(s2.accepted_sites = count(*),'Accepted','Incomplete') as final_status
  from
    Sites s1
  left outer join
  (
    select
      unique_id,
      count(*) as accepted_sites
    from
      Sites
    where
      status = 'Accepted'
    group by
      unique_id
  ) as s2 on s2.unique_id = s1.unique_id
  group by
    s1.unique_id
) s on s.unique_id = Sites.unique_id
set
  Sites.final_status = s.final_status

此查询的作用:

  • 内部select语句计算每个唯一ID所接受的网站数。
  • 外部select语句比较每个唯一ID的站点总数,并将其与接受的站点数进行比较。如果计数相等,则最终状态为"接受"否则,它是"不完整"。
  • update语句将final_status设置为外部select语句的结果。 (我无法测试更新部分,但希望它至少能够关闭。)

在Excel中执行此操作的原始答案

如果您的牌位于A1,

尝试将此数组论坛* 输入到单元格D2中,然后复制到表格的最后一行:

=IF(SUM(IF((A$2:A$10=A2)*(C$2:C$10="Accepted"),1,0))=COUNTIF(A$2:A$10,A2),"Accepted","Incomplete")

*数组公式允许您同时处理整个数据列上的数字,而不是一次只处理一行。要输入数组公式,您需要键入或粘贴公式,然后按 Ctrl + Shift + Enter

如果您已成功完成此操作,公式应围绕它获得大括号,如下所示:

{=IF(SUM(IF((A$2:A$10=A2)*(C$2:C$10="Accepted"),1,0))=COUNTIF(A$2:A$10,A2),"Accepted","Incomplete")}

这个公式的作用:

  • 外部IF语句将"接受"如果条件为真,否则,它会使" Incomplete"
  • COUNTIF语句计算整个unique_id列中与当前行的unique_id匹配的ID数。
  • SUM和内部IF语句会将unique_id与当前行unique_id匹配且的行数相加状态是"接受"。 (请注意,对于数组公式,*表示and。)

因此,总的来说,公式检查接受ID的次数是否与ID相同的行数相同。

这是我的测试表:

unique_id   site        status      final_status
HMEX093     MEX025      Accepted    Incomplete
HMEX093     HMEX056     Accepted    Incomplete
HMEX093     LTY0014     Pending     Incomplete
HMEX094     MEX025      Accepted    Accepted
HMEX094     HMEX056     Accepted    Accepted
HMEX094     LTY0014     Accepted    Accepted
HMEX095     MEX025      Pending     Incomplete
HMEX095     HMEX056     Pending     Incomplete
HMEX095     LTY0014     Pending     Incomplete