Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果列具有重复的值,则选择下一个值_Sql_Google Bigquery_Legacy - Fatal编程技术网

Sql 如果列具有重复的值,则选择下一个值

Sql 如果列具有重复的值,则选择下一个值,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

谢谢你调查这件事

如何在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 33654
嗯。如果我理解正确,您只需要在季度/计划/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排序