Select DISTINCT on DataTable

本文介绍了一种使用C#实现的数据表去重方法,通过指定字段名来去除数据表中的重复记录,确保数据的唯一性。
部署运行你感兴趣的模型镜像


private static DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
{
     object[] lastValues;
     DataTable newTable;
     DataRow[] orderedRows;

     if (FieldNames == null || FieldNames.Length == 0)
          throw new ArgumentNullException("FieldNames");

     lastValues = new object[FieldNames.Length];
     newTable = new DataTable();

     foreach (string fieldName in FieldNames)
          newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);

     orderedRows = SourceTable.Select("", string.Join(", ", FieldNames));

     foreach (DataRow row in orderedRows)
     {
          if (!fieldValuesAreEqual(lastValues, row, FieldNames))
          {
               newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));

               setLastValues(lastValues, row, FieldNames);
          }
     }

     return newTable;
}

private static bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
{
     bool areEqual = true;

     for (int i = 0; i < fieldNames.Length; i++)
     {
          if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
          {
               areEqual = false;
               break;
          }
     }

     return areEqual;
}

private static DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
{
     foreach (string field in fieldNames)
          newRow[field] = sourceRow[field];

     return newRow;
}

private static void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
{
     for (int i = 0; i < fieldNames.Length; i++)
          lastValues[i] = sourceRow[fieldNames[i]];
}  

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

public DataTable GetNTOSummaryData(List<object> productvalue) { var PRODUCTSPECNAME = new StringBuilder(); var name = new StringBuilder(); var RETICLENAME = new StringBuilder(); var PRODBODY = new StringBuilder(); DataTable NTOProductSummaryTable = new DataTable(); foreach (var value in productvalue) { //if (PRODUCTSPECNAME.Length > 0) //{ // PRODUCTSPECNAME.Append(" AND "); //} //PRODUCTSPECNAME.Append($"t.PRODUCTSPECNAME like '{value}%'"); //if (name.Length > 0) //{ // name.Append(" AND "); //} //name.Append($"t.name like '{value}%'"); //if (RETICLENAME.Length > 0) //{ // RETICLENAME.Append(" AND "); //} //RETICLENAME.Append($"t.RETICLENAME like '%{value}%'"); //if (PRODBODY.Length > 0) //{ // PRODBODY.Append(" OR "); //} //PRODBODY.Append($"t.PRODBODY = '{value}'"); var sql = $@"select aa.* from (select t.PRODBODY, t.CUSTOMER, a.GROSSDIE, a.yegroup, a.APPLICATION, m.LOTNAME, m.eventtime, m.productname, m.createtime, f.*, l.lotowner, n.maskintime, b.fotime from ESPT_PRODGROUP_INFO_BASIC t left join ESPT_PRODGROUP_INFO_DEFECT a on t.prodbody = a.prodbody left join rpt.lot_start_history m on t.PRODBODY = substr(m.productname, 0, 4) left join (select distinct substr(t.lotname, 0, 7) as lotname, t.PRODUCTSPECNAME, min(t.fotime) as fotime from ESPT_EDA_SHIP_LOT t where t.PRODUCTSPECNAME like '{value}%' group by substr(t.lotname, 0, 7), t.PRODUCTSPECNAME) b on substr(m.lotname, 0, 7) = b.lotname left join (select t.name, t.responsibleowner || '(' || f.username || ')' as lotowner from rpt.productowner t, rpt.base_userprofile f where t.RESPONSIBLEOWNER = f.userid and t.name like '{value}%') l on l.name = m.productname left join (select sum(t.totalwip) as wip, t.dayinfo, substr(t.PRODUCTID, 0, 4) as prod from (select t.* from ESPT_WIP_DAILY_INFO t where t.dayinfo = to_char(sysdate - 1, 'yyyymmdd')) t group by t.dayinfo, substr(t.PRODUCTID, 0, 4)) f on f.prod = t.PRODBODY left join (select min(t.actual) as maskintime, substr(t.RETICLENAME, instr(t.RETICLENAME, '-', 1) + 1, 4) as prod from ESPT_MASK_SCHEDULE_INFO t where t.RETICLENAME like '%{value}%' group by substr(t.RETICLENAME, instr(t.RETICLENAME, '-', 1) + 1, 4)) n on n.prod = f.prod where t.PRODBODY = '{value}' and m.lotname like 'BS%' order by m.eventtime) aa where rownum = 1"; using (ItemInfoInitialization.ItemInfoInitialization _itemInfo = new ItemInfoInitialization.ItemInfoInitialization(YMSDB)) { NTOProductSummaryTable = _itemInfo.DataTableFill("NTOProductSummaryTable", sql.ToString()); } } //DataTable A = new DataTable(); return NTOProductSummaryTable; }希望将每次循环的数据都存到一个datatable
11-01
var groupdata = GetData.Get_Bygroup(); public static DataTable Get_Bygroup() { var sql_bygroup = new StringBuilder(); var datetime_char = datetime.ToString("yyyyMMdd"); var datetime_6 = datetime.AddDays(-6).ToString("yyyyMMdd"); sql_bygroup.Append(" with aa as ( select distinct tt.recipe,case when tt.total_count<>0 then round(tt.ooc_count_new/tt.total_count*100,10) else 0 end as OOC_Rate "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct xx.recipe,xx.total_count,yy.ooc_count, "); sql_bygroup.Append(" case when yy.ooc_count is null then 0 else yy.ooc_count end as ooc_count_new "); sql_bygroup.Append(" "); sql_bygroup.Append(" "); sql_bygroup.Append(" from ( select t.recipe,count(1) as total_count "); //sql_bygroup.Append(" from espt_ye_lot_ooc_summary t,espt_ye_ooc_prod_control aa "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct jj.datetime,jj.lot,jj.lot_ooc,jj.product,jj.layer, "); sql_bygroup.Append(" jj.recipe,jj.machinename,jj.measureddatetime,jj.runcardid,jj.productname, "); sql_bygroup.Append(" jj.topplanname,jj.edcplanid,jj.measurestepname,jj.stepsequence,jj.processstepid,jj.processstepseq "); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,espt_ye_ooc_prod_control aa "); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}' and jj.datetime <= '{1}' ", datetime_6, datetime_char); sql_bygroup.Append(" and substr(jj.machinename,1,5) in ('FLBFI','FLDFI') "); //if (cbo_mach_cap.Text != "") //{ // sql_bygroup.Append(" and substr(t.machinename,1,5) in ( "); // foreach (var item in cbo_mach_cap.Text.Split(',')) // { // sql_bygroup.AppendFormat("'{0}',", item.Trim()); // } // sql_bygroup.Remove(sql_bygroup.Length - 1, 1); // sql_bygroup.Append(") "); //} sql_bygroup.Append(" and jj.product=aa.prodbody and aa.product_need='Y' "); sql_bygroup.AppendFormat(" and jj.recipe in ( select distinct k.recipe from espt_ye_lot_ooc_summary k where k.datetime='{0}' ))t ", datetime_char); sql_bygroup.Append(" group by t.recipe) xx "); sql_bygroup.Append(" left join ( select t.recipe,count(1) as ooc_count "); //sql_bygroup.Append(" from espt_ye_lot_ooc_summary t,espt_ye_ooc_prod_control aa "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct jj.datetime,jj.lot,jj.lot_ooc,jj.product,jj.layer, "); sql_bygroup.Append(" jj.recipe,jj.machinename,jj.measureddatetime,jj.runcardid,jj.productname, "); sql_bygroup.Append(" jj.topplanname,jj.edcplanid,jj.measurestepname,jj.stepsequence,jj.processstepid,jj.processstepseq "); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,espt_ye_ooc_prod_control aa "); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}' and jj.datetime <= '{1}' ", datetime_6, datetime_char); sql_bygroup.Append(" and substr(jj.machinename,1,5) in ('FLBFI','FLDFI') "); //if (cbo_mach_cap.Text != "") //{ // sql_bygroup.Append(" and substr(t.machinename,1,5) in ( "); // foreach (var item in cbo_mach_cap.Text.Split(',')) // { // sql_bygroup.AppendFormat("'{0}',", item.Trim()); // } // sql_bygroup.Remove(sql_bygroup.Length - 1, 1); // sql_bygroup.Append(") "); //} sql_bygroup.Append(" and jj.lot_ooc='Y' and jj.product=aa.prodbody and aa.product_need='Y' "); sql_bygroup.AppendFormat(" and jj.recipe in ( select distinct k.recipe from espt_ye_lot_ooc_summary k where k.datetime='{0}' ))t ", datetime_char); sql_bygroup.Append(" group by t.recipe ) yy "); sql_bygroup.Append(" on xx.recipe=yy.recipe ) tt ), "); sql_bygroup.Append(" "); sql_bygroup.Append(" "); sql_bygroup.Append(" bb as (select distinct tt.yegroup, "); sql_bygroup.Append(" tt.recipe,"); sql_bygroup.Append(" case"); sql_bygroup.Append(" when tt.total_count <> 0 then"); sql_bygroup.Append(" round(tt.ooc_count_new / tt.total_count * 100, 2)"); sql_bygroup.Append(" else"); sql_bygroup.Append(" 0"); sql_bygroup.Append(" end as OOC_Rate"); sql_bygroup.Append(" from(select distinct xx.yegroup,"); sql_bygroup.Append(" xx.recipe,"); sql_bygroup.Append(" xx.total_count,"); sql_bygroup.Append(" yy.ooc_count,"); sql_bygroup.Append(" case"); sql_bygroup.Append(" when yy.ooc_count is null then"); sql_bygroup.Append(" 0"); sql_bygroup.Append(" else"); sql_bygroup.Append(" yy.ooc_count"); sql_bygroup.Append(" end as ooc_count_new"); sql_bygroup.Append(" from(select t.yegroup, t.recipe, count(1) as total_count"); sql_bygroup.Append(" from(select hh.*, zz.yegroup"); sql_bygroup.Append(" from(select distinct jj.datetime,"); sql_bygroup.Append(" jj.lot,"); sql_bygroup.Append(" jj.lot_ooc,"); sql_bygroup.Append(" jj.product,"); sql_bygroup.Append(" jj.layer,"); sql_bygroup.Append(" jj.recipe,"); sql_bygroup.Append(" jj.machinename,"); sql_bygroup.Append(" jj.measureddatetime,"); sql_bygroup.Append(" jj.runcardid,"); sql_bygroup.Append(" jj.productname,"); sql_bygroup.Append(" jj.topplanname,"); sql_bygroup.Append(" jj.edcplanid,"); sql_bygroup.Append(" jj.measurestepname,"); sql_bygroup.Append(" jj.stepsequence,"); sql_bygroup.Append(" jj.processstepid,"); sql_bygroup.Append(" jj.processstepseq"); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,"); sql_bygroup.Append(" espt_ye_ooc_prod_control aa"); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}'", datetime_6); sql_bygroup.AppendFormat(" and jj.datetime <= '{0}'", datetime_char); sql_bygroup.Append(" and jj.product = aa.prodbody"); sql_bygroup.Append(" and aa.product_need = 'Y'"); sql_bygroup.Append(" and substr(jj.machinename, 1, 5) in ('FLBFI', 'FLDFI')"); sql_bygroup.Append(" and jj.recipe in (select aa.recipe"); sql_bygroup.Append(" from aa /*where ( aa.ooc_rate=0 or aa.ooc_rate>=50 )*/"); sql_bygroup.Append(" )) hh"); sql_bygroup.Append(" left join ESPT_PRODGROUP_INFO_DEFECT zz"); sql_bygroup.Append(" on hh.product = zz.prodbody"); sql_bygroup.Append(" and zz.yegroup is not null) t"); sql_bygroup.Append(" group by t.yegroup, t.recipe) xx"); sql_bygroup.Append(" left join(select t.yegroup, t.recipe, count(1) as ooc_count"); sql_bygroup.Append(" from(select hh.*, zz.yegroup"); sql_bygroup.Append(" from(select distinct jj.datetime,"); sql_bygroup.Append(" jj.lot,"); sql_bygroup.Append(" jj.lot_ooc,"); sql_bygroup.Append(" jj.product,"); sql_bygroup.Append(" jj.layer,"); sql_bygroup.Append(" jj.recipe,"); sql_bygroup.Append(" jj.machinename,"); sql_bygroup.Append(" jj.measureddatetime,"); sql_bygroup.Append(" jj.runcardid,"); sql_bygroup.Append(" jj.productname,"); sql_bygroup.Append(" jj.topplanname,"); sql_bygroup.Append(" jj.edcplanid,"); sql_bygroup.Append(" jj.measurestepname,"); sql_bygroup.Append(" jj.stepsequence,"); sql_bygroup.Append(" jj.processstepid,"); sql_bygroup.Append(" jj.processstepseq"); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,"); sql_bygroup.Append(" espt_ye_ooc_prod_control aa"); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}'", datetime_6); sql_bygroup.AppendFormat(" and jj.datetime <= '{0}'", datetime_char); sql_bygroup.Append(" and jj.lot_ooc = 'Y'"); sql_bygroup.Append(" and jj.yegroup is not null"); sql_bygroup.Append(" and jj.product = aa.prodbody"); sql_bygroup.Append(" and aa.product_need = 'Y'"); sql_bygroup.Append(" and substr(jj.machinename, 1, 5) in ('FLBFI', 'FLDFI')"); sql_bygroup.Append(" and jj.recipe in (select aa.recipe"); sql_bygroup.Append(" from aa /*where ( aa.ooc_rate=0 or aa.ooc_rate>=50 )*/"); sql_bygroup.Append(" )) hh"); sql_bygroup.Append(" left join ESPT_PRODGROUP_INFO_DEFECT zz"); sql_bygroup.Append(" on hh.product = zz.prodbody"); sql_bygroup.Append(" and zz.yegroup is not null) t"); sql_bygroup.Append(" group by t.yegroup, t.recipe) yy"); sql_bygroup.Append(" on xx.yegroup = yy.yegroup"); sql_bygroup.Append(" and xx.recipe = yy.recipe) tt),"); sql_bygroup.AppendFormat(" zz as (select '{0}' as datetime,bb.* from bb) ", datetime_char); sql_bygroup.Append(" select distinct zz.yegroup, "); sql_bygroup.Append(" case when r1.ooc_rate_1 is not null then r1.ooc_rate_1 else 0 end as ooc_rate_1, "); sql_bygroup.Append(" case when r2.ooc_rate_2 is not null then r2.ooc_rate_2 else 0 end as ooc_rate_2, "); sql_bygroup.Append(" case when r3.ooc_rate_3 is not null then r3.ooc_rate_3 else 0 end as ooc_rate_3, "); sql_bygroup.Append(" case when r4.ooc_rate_4 is not null then r4.ooc_rate_4 else 0 end as ooc_rate_4, "); sql_bygroup.Append(" case when r5.ooc_rate_5 is not null then r5.ooc_rate_5 else 0 end as ooc_rate_5 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_1 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate=0 "); sql_bygroup.Append(" group by zz.yegroup ) r1 on zz.yegroup=r1.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_2 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>0 and zz.ooc_rate<=30 "); sql_bygroup.Append(" group by zz.yegroup ) r2 on zz.yegroup=r2.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_3 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>30 and zz.ooc_rate<50 "); sql_bygroup.Append(" group by zz.yegroup) r3 on zz.yegroup=r3.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_4 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>=50 and zz.ooc_rate<100 "); sql_bygroup.Append(" group by zz.yegroup) r4 on zz.yegroup=r4.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_5 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate=100 "); sql_bygroup.Append(" group by zz.yegroup) r5 on zz.yegroup=r5.yegroup "); sql_bygroup.AppendFormat(" where zz.datetime='{0}' ", datetime_char); sql_bygroup.Append(" order by zz.yegroup asc "); var group_table = ESPTDBItemInfo.TableFill("group_table", sql_bygroup.ToString()); return group_table; } 根据上述C#与sql语句,详解出填入tableShapeGroupSum表格第一列的数据是如何筛选的
最新发布
11-27
public static DataTable Get_Bygroup() { var sql_bygroup = new StringBuilder(); var datetime_char = datetime.ToString("yyyyMMdd"); var datetime_6 = datetime.AddDays(-6).ToString("yyyyMMdd"); sql_bygroup.Append(" with aa as ( select distinct tt.recipe,case when tt.total_count<>0 then round(tt.ooc_count_new/tt.total_count*100,10) else 0 end as OOC_Rate "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct xx.recipe,xx.total_count,yy.ooc_count, "); sql_bygroup.Append(" case when yy.ooc_count is null then 0 else yy.ooc_count end as ooc_count_new "); sql_bygroup.Append(" "); sql_bygroup.Append(" "); sql_bygroup.Append(" from ( select t.recipe,count(1) as total_count "); //sql_bygroup.Append(" from espt_ye_lot_ooc_summary t,espt_ye_ooc_prod_control aa "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct jj.datetime,jj.lot,jj.lot_ooc,jj.product,jj.layer, "); sql_bygroup.Append(" jj.recipe,jj.machinename,jj.measureddatetime,jj.runcardid,jj.productname, "); sql_bygroup.Append(" jj.topplanname,jj.edcplanid,jj.measurestepname,jj.stepsequence,jj.processstepid,jj.processstepseq "); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,espt_ye_ooc_prod_control aa "); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}' and jj.datetime <= '{1}' ", datetime_6, datetime_char); sql_bygroup.Append(" and substr(jj.machinename,1,5) in ('FLBFI','FLDFI') "); //if (cbo_mach_cap.Text != "") //{ // sql_bygroup.Append(" and substr(t.machinename,1,5) in ( "); // foreach (var item in cbo_mach_cap.Text.Split(',')) // { // sql_bygroup.AppendFormat("'{0}',", item.Trim()); // } // sql_bygroup.Remove(sql_bygroup.Length - 1, 1); // sql_bygroup.Append(") "); //} sql_bygroup.Append(" and jj.product=aa.prodbody and aa.product_need='Y' "); sql_bygroup.AppendFormat(" and jj.recipe in ( select distinct k.recipe from espt_ye_lot_ooc_summary k where k.datetime='{0}' ))t ", datetime_char); sql_bygroup.Append(" group by t.recipe) xx "); sql_bygroup.Append(" left join ( select t.recipe,count(1) as ooc_count "); //sql_bygroup.Append(" from espt_ye_lot_ooc_summary t,espt_ye_ooc_prod_control aa "); sql_bygroup.Append(" from ( "); sql_bygroup.Append(" select distinct jj.datetime,jj.lot,jj.lot_ooc,jj.product,jj.layer, "); sql_bygroup.Append(" jj.recipe,jj.machinename,jj.measureddatetime,jj.runcardid,jj.productname, "); sql_bygroup.Append(" jj.topplanname,jj.edcplanid,jj.measurestepname,jj.stepsequence,jj.processstepid,jj.processstepseq "); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,espt_ye_ooc_prod_control aa "); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}' and jj.datetime <= '{1}' ", datetime_6, datetime_char); sql_bygroup.Append(" and substr(jj.machinename,1,5) in ('FLBFI','FLDFI') "); //if (cbo_mach_cap.Text != "") //{ // sql_bygroup.Append(" and substr(t.machinename,1,5) in ( "); // foreach (var item in cbo_mach_cap.Text.Split(',')) // { // sql_bygroup.AppendFormat("'{0}',", item.Trim()); // } // sql_bygroup.Remove(sql_bygroup.Length - 1, 1); // sql_bygroup.Append(") "); //} sql_bygroup.Append(" and jj.lot_ooc='Y' and jj.product=aa.prodbody and aa.product_need='Y' "); sql_bygroup.AppendFormat(" and jj.recipe in ( select distinct k.recipe from espt_ye_lot_ooc_summary k where k.datetime='{0}' ))t ", datetime_char); sql_bygroup.Append(" group by t.recipe ) yy "); sql_bygroup.Append(" on xx.recipe=yy.recipe ) tt ), "); sql_bygroup.Append(" "); sql_bygroup.Append(" "); sql_bygroup.Append(" bb as (select distinct tt.yegroup, "); sql_bygroup.Append(" tt.recipe,"); sql_bygroup.Append(" case"); sql_bygroup.Append(" when tt.total_count <> 0 then"); sql_bygroup.Append(" round(tt.ooc_count_new / tt.total_count * 100, 2)"); sql_bygroup.Append(" else"); sql_bygroup.Append(" 0"); sql_bygroup.Append(" end as OOC_Rate"); sql_bygroup.Append(" from(select distinct xx.yegroup,"); sql_bygroup.Append(" xx.recipe,"); sql_bygroup.Append(" xx.total_count,"); sql_bygroup.Append(" yy.ooc_count,"); sql_bygroup.Append(" case"); sql_bygroup.Append(" when yy.ooc_count is null then"); sql_bygroup.Append(" 0"); sql_bygroup.Append(" else"); sql_bygroup.Append(" yy.ooc_count"); sql_bygroup.Append(" end as ooc_count_new"); sql_bygroup.Append(" from(select t.yegroup, t.recipe, count(1) as total_count"); sql_bygroup.Append(" from(select hh.*, zz.yegroup"); sql_bygroup.Append(" from(select distinct jj.datetime,"); sql_bygroup.Append(" jj.lot,"); sql_bygroup.Append(" jj.lot_ooc,"); sql_bygroup.Append(" jj.product,"); sql_bygroup.Append(" jj.layer,"); sql_bygroup.Append(" jj.recipe,"); sql_bygroup.Append(" jj.machinename,"); sql_bygroup.Append(" jj.measureddatetime,"); sql_bygroup.Append(" jj.runcardid,"); sql_bygroup.Append(" jj.productname,"); sql_bygroup.Append(" jj.topplanname,"); sql_bygroup.Append(" jj.edcplanid,"); sql_bygroup.Append(" jj.measurestepname,"); sql_bygroup.Append(" jj.stepsequence,"); sql_bygroup.Append(" jj.processstepid,"); sql_bygroup.Append(" jj.processstepseq"); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,"); sql_bygroup.Append(" espt_ye_ooc_prod_control aa"); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}'", datetime_6); sql_bygroup.AppendFormat(" and jj.datetime <= '{0}'", datetime_char); sql_bygroup.Append(" and jj.product = aa.prodbody"); sql_bygroup.Append(" and aa.product_need = 'Y'"); sql_bygroup.Append(" and substr(jj.machinename, 1, 5) in ('FLBFI', 'FLDFI')"); sql_bygroup.Append(" and jj.recipe in (select aa.recipe"); sql_bygroup.Append(" from aa /*where ( aa.ooc_rate=0 or aa.ooc_rate>=50 )*/"); sql_bygroup.Append(" )) hh"); sql_bygroup.Append(" left join ESPT_PRODGROUP_INFO_DEFECT zz"); sql_bygroup.Append(" on hh.product = zz.prodbody"); sql_bygroup.Append(" and zz.yegroup is not null) t"); sql_bygroup.Append(" group by t.yegroup, t.recipe) xx"); sql_bygroup.Append(" left join(select t.yegroup, t.recipe, count(1) as ooc_count"); sql_bygroup.Append(" from(select hh.*, zz.yegroup"); sql_bygroup.Append(" from(select distinct jj.datetime,"); sql_bygroup.Append(" jj.lot,"); sql_bygroup.Append(" jj.lot_ooc,"); sql_bygroup.Append(" jj.product,"); sql_bygroup.Append(" jj.layer,"); sql_bygroup.Append(" jj.recipe,"); sql_bygroup.Append(" jj.machinename,"); sql_bygroup.Append(" jj.measureddatetime,"); sql_bygroup.Append(" jj.runcardid,"); sql_bygroup.Append(" jj.productname,"); sql_bygroup.Append(" jj.topplanname,"); sql_bygroup.Append(" jj.edcplanid,"); sql_bygroup.Append(" jj.measurestepname,"); sql_bygroup.Append(" jj.stepsequence,"); sql_bygroup.Append(" jj.processstepid,"); sql_bygroup.Append(" jj.processstepseq"); sql_bygroup.Append(" from espt_ye_lot_ooc_summary jj,"); sql_bygroup.Append(" espt_ye_ooc_prod_control aa"); sql_bygroup.AppendFormat(" where jj.datetime >= '{0}'", datetime_6); sql_bygroup.AppendFormat(" and jj.datetime <= '{0}'", datetime_char); sql_bygroup.Append(" and jj.lot_ooc = 'Y'"); sql_bygroup.Append(" and jj.yegroup is not null"); sql_bygroup.Append(" and jj.product = aa.prodbody"); sql_bygroup.Append(" and aa.product_need = 'Y'"); sql_bygroup.Append(" and substr(jj.machinename, 1, 5) in ('FLBFI', 'FLDFI')"); sql_bygroup.Append(" and jj.recipe in (select aa.recipe"); sql_bygroup.Append(" from aa /*where ( aa.ooc_rate=0 or aa.ooc_rate>=50 )*/"); sql_bygroup.Append(" )) hh"); sql_bygroup.Append(" left join ESPT_PRODGROUP_INFO_DEFECT zz"); sql_bygroup.Append(" on hh.product = zz.prodbody"); sql_bygroup.Append(" and zz.yegroup is not null) t"); sql_bygroup.Append(" group by t.yegroup, t.recipe) yy"); sql_bygroup.Append(" on xx.yegroup = yy.yegroup"); sql_bygroup.Append(" and xx.recipe = yy.recipe) tt),"); sql_bygroup.AppendFormat(" zz as (select '{0}' as datetime,bb.* from bb) ", datetime_char); sql_bygroup.Append(" select distinct zz.yegroup, "); sql_bygroup.Append(" case when r1.ooc_rate_1 is not null then r1.ooc_rate_1 else 0 end as ooc_rate_1, "); sql_bygroup.Append(" case when r2.ooc_rate_2 is not null then r2.ooc_rate_2 else 0 end as ooc_rate_2, "); sql_bygroup.Append(" case when r3.ooc_rate_3 is not null then r3.ooc_rate_3 else 0 end as ooc_rate_3, "); sql_bygroup.Append(" case when r4.ooc_rate_4 is not null then r4.ooc_rate_4 else 0 end as ooc_rate_4, "); sql_bygroup.Append(" case when r5.ooc_rate_5 is not null then r5.ooc_rate_5 else 0 end as ooc_rate_5 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_1 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate=0 "); sql_bygroup.Append(" group by zz.yegroup ) r1 on zz.yegroup=r1.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_2 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>0 and zz.ooc_rate<=30 "); sql_bygroup.Append(" group by zz.yegroup ) r2 on zz.yegroup=r2.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_3 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>30 and zz.ooc_rate<50 "); sql_bygroup.Append(" group by zz.yegroup) r3 on zz.yegroup=r3.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_4 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate>=50 and zz.ooc_rate<100 "); sql_bygroup.Append(" group by zz.yegroup) r4 on zz.yegroup=r4.yegroup "); sql_bygroup.Append(" left join "); sql_bygroup.Append(" (select zz.yegroup,count(zz.recipe) as ooc_rate_5 "); sql_bygroup.Append(" from zz "); sql_bygroup.Append(" where zz.ooc_rate=100 "); sql_bygroup.Append(" group by zz.yegroup) r5 on zz.yegroup=r5.yegroup "); sql_bygroup.AppendFormat(" where zz.datetime='{0}' ", datetime_char); sql_bygroup.Append(" order by zz.yegroup asc "); 根据上述代码,找出ooc_rate为100%的数据来源于哪里
11-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值