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语句,但没有成功。
答案 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