Sql 如果列具有重复的值,则选择下一个值
谢谢你调查这件事 如何在Bigquery SQL中编写IF语句,如果季度列具有相同的季度,则总结单位数量,然后选择类型为ACTL、OTLK等的单位数量。类型CWV是历史数据,因此可以有重复的季度,但如果有类型为ACTL、OTLK的单位,与CWV相同季度的etc,那么我希望SQL选择类型为ACTL、OTLK等的单元,而不是CWV 注:此sql将用于表格,XYZ的我的单位总数应为977071,不包括CWV/FY20-Q4/104955 一行 TMC_BC 类型 程序 一刻钟 单位 1. TMC ACTL XYZ FY20-Q2 0 2. TMC OTLK XYZ FY20-Q3 6500 3. TMC CWV XYZ FY20-Q4 104955 4. TMC ACTL XYZ FY20-Q4 191300 5. TMC CWV XYZ FY21-Q1 182448 6. TMC_BC CWV XYZ FY21-Q2 91346 7. TMC CWV XYZ FY21-Q2 158126 8. TMC_BC CWV XYZ FY21-Q1 62500 9 TMC CWV XYZ FY21-Q1 157287 10 TMC_BC CWV XYZ FY21-Q1 62500 11 TMC CWV XYZ FY21-Q1 31410 12 TMC_BC CWV XYZ FY21-Q1 33654Sql 如果列具有重复的值,则选择下一个值,sql,google-bigquery,legacy,Sql,Google Bigquery,Legacy,谢谢你调查这件事 如何在Bigquery SQL中编写IF语句,如果季度列具有相同的季度,则总结单位数量,然后选择类型为ACTL、OTLK等的单位数量。类型CWV是历史数据,因此可以有重复的季度,但如果有类型为ACTL、OTLK的单位,与CWV相同季度的etc,那么我希望SQL选择类型为ACTL、OTLK等的单元,而不是CWV 注:此sql将用于表格,XYZ的我的单位总数应为977071,不包括CWV/FY20-Q4/104955 一行 TMC_BC 类型 程序 一刻钟 单位 1. TMC AC
嗯。如果我理解正确,您只需要在季度/计划/tmc_bc组合没有其他类型时使用“CWV”。您可以使用窗口功能进行此筛选:
select r.*
from (select r.*,
count(*) over (partition by quarter, program, tmc_bc) as q_cnt,
countif(type = 'CWV') over (partition by quarter, program, tmc_bc) as q_cnt_cwv
from xx_REPORTS r
) r
where (q_cnt = q_cnt_cwv) or (type <> 'CWV');
实际上,如果逻辑正确,那么您需要的是非CMV行(如果有),否则是所有行。一个更简单的表达式是:
select r.*
from (select r.*,
countif(type <> 'CWV') over (partition by quarter, program, tmc_bc) as q_cnt_noncwv
from xx_REPORTS r
) r
where (q_cnt_noncwv > 0 and type <> 'CWV') or q.cnt_noncwv = 0;
编辑你的问题,并明确你想要的结果。谢谢,但我如何用我目前的脚本来写这篇文章,我对此还是新手。从select r.*中选择r.*,按季度在分区上计数类型“CWV”,程序,tmc_bc作为q_cnt_noncwv从xx_报告r r,其中q_cnt_noncwv>0,并键入“CWV”或q.cnt_noncwv=0@快。将countif放入子查询中,并将where条件添加到外部查询中。如果这对确定重复项很重要,您也可以在子查询中进行筛选。选择tmc 0和bc时的大小写。键入“CWV”或q.cnt_noncwv=0按4 asc排序