[ZZ]distinct 用法

SQL查询技巧
本文探讨了如何正确使用SQL进行数据查询,特别是如何运用DISTINCT关键字选取唯一主题,以及如何结合GROUP BY和其他聚合函数(如MIN、MAX、COUNT)来实现复杂的数据筛选与排序。
select distinct topic from tablename
虽然成立,但是缺失了其他字段,如果
select distinct * from ..
又失去了distinct的意义。

后来我这样写select distinct(topic),content from tablename
结果用do while....Loop来显示结果,也不对。

请问该怎么写,谢谢!!

--------我是分割线--------------------

select A min(B),min(C),count(*) from [table] where [条件] group by  A
having [条件] order by A desc

显示出来的字段和排序字段都要包括在group by 中
但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中
如上句的min(B),min(C),count(*)
一般条件写在where 后面
有聚合函数的条件写在having 后面
如果在上句中having加 count(*)>2  就可以查出记录A的重复次数大于2的记录

--------我是分割线--------------------

http://bbs.blueidea.com/viewthread.php?tid=2482950&page=

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 GetSumRawTable() { DataTable sum_rawdata = new DataTable(); var sql_sumrawdata = new StringBuilder(); for (var i = _datelist - 1; i >= 0; i--) { var datetime_char = datetime.ToString("yyyyMMdd"); var datetime_new = datetime.AddDays(-i).ToString("yyyyMMdd"); var datetime_new_6 = datetime.AddDays(-6 - i).ToString("yyyyMMdd"); sql_sumrawdata.AppendFormat(" select '{0}' as datetime,hh.* from (select * ", datetime_new); sql_sumrawdata.Append(" from (with zz as "); sql_sumrawdata.Append(" ( 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_sumrawdata.Append(" from ( "); sql_sumrawdata.Append(" select distinct xx.recipe,xx.total_count,yy.ooc_count, "); sql_sumrawdata.Append(" case when yy.ooc_count is null then 0 else yy.ooc_count end as ooc_count_new "); sql_sumrawdata.Append(" from ( select t.recipe,count(1) as total_count "); sql_sumrawdata.Append(" from(select distinct jj.datetime,"); sql_sumrawdata.Append(" jj.lot,"); sql_sumrawdata.Append(" jj.lot_ooc,"); sql_sumrawdata.Append(" jj.product,"); sql_sumrawdata.Append(" jj.layer,"); sql_sumrawdata.Append(" jj.recipe,"); sql_sumrawdata.Append(" jj.machinename,"); sql_sumrawdata.Append(" jj.measureddatetime,"); sql_sumrawdata.Append(" jj.runcardid,"); sql_sumrawdata.Append(" jj.productname,"); sql_sumrawdata.Append(" jj.topplanname,"); sql_sumrawdata.Append(" jj.edcplanid,"); sql_sumrawdata.Append(" jj.measurestepname,"); sql_sumrawdata.Append(" jj.stepsequence,"); sql_sumrawdata.Append(" jj.processstepid,"); sql_sumrawdata.Append(" jj.processstepseq"); sql_sumrawdata.Append(" from espt_ye_lot_ooc_summary jj,"); sql_sumrawdata.Append(" espt_ye_ooc_prod_control aa"); sql_sumrawdata.AppendFormat(" where jj.datetime >= '{0}'", datetime_new_6); sql_sumrawdata.AppendFormat(" and jj.datetime <= '{0}'", datetime_new); sql_sumrawdata.Append(" and substr(jj.machinename, 1, 5) in ('FLBFI', 'FLDFI')"); sql_sumrawdata.Append(" and jj.product = aa.prodbody"); sql_sumrawdata.Append(" and aa.product_need = 'Y'"); sql_sumrawdata.Append(" and jj.recipe in"); sql_sumrawdata.Append(" (select distinct k.recipe"); sql_sumrawdata.Append(" from espt_ye_lot_ooc_summary k"); sql_sumrawdata.AppendFormat(" where k.datetime = '{0}')) t", datetime_new); sql_sumrawdata.Append(" group by t.recipe) xx"); sql_sumrawdata.Append(" left join ( select t.recipe,count(1) as ooc_count "); sql_sumrawdata.Append(" from(select distinct jj.datetime,"); sql_sumrawdata.Append(" jj.lot,"); sql_sumrawdata.Append(" jj.lot_ooc,"); sql_sumrawdata.Append(" jj.product,"); sql_sumrawdata.Append(" jj.layer,"); sql_sumrawdata.Append(" jj.recipe,"); sql_sumrawdata.Append(" jj.machinename,"); sql_sumrawdata.Append(" jj.measureddatetime,"); sql_sumrawdata.Append(" jj.runcardid,"); sql_sumrawdata.Append(" jj.productname,"); sql_sumrawdata.Append(" jj.topplanname,"); sql_sumrawdata.Append(" jj.edcplanid,"); sql_sumrawdata.Append(" jj.measurestepname,"); sql_sumrawdata.Append(" jj.stepsequence,"); sql_sumrawdata.Append(" jj.processstepid,"); sql_sumrawdata.Append(" jj.processstepseq"); sql_sumrawdata.Append(" from espt_ye_lot_ooc_summary jj,"); sql_sumrawdata.Append(" espt_ye_ooc_prod_control aa"); sql_sumrawdata.AppendFormat(" where jj.datetime >= '{0}'", datetime_new_6); sql_sumrawdata.AppendFormat(" and jj.datetime <= '{0}'", datetime_new); sql_sumrawdata.Append(" and substr(jj.machinename,1,5) in ('FLBFI', 'FLDFI')"); sql_sumrawdata.Append(" and jj.lot_ooc = 'Y'"); sql_sumrawdata.Append(" and jj.product = aa.prodbody"); sql_sumrawdata.Append(" and aa.product_need = 'Y'"); sql_sumrawdata.Append(" and jj.recipe in"); sql_sumrawdata.Append(" (select distinct k.recipe"); sql_sumrawdata.Append(" from espt_ye_lot_ooc_summary k"); sql_sumrawdata.AppendFormat(" where k.datetime = '{0}')) t", datetime_new); sql_sumrawdata.Append(" group by t.recipe) yy"); sql_sumrawdata.Append(" on xx.recipe=yy.recipe ) tt ) "); sql_sumrawdata.Append(" select '0' as ooc_rate,count(*) as recipe_count "); sql_sumrawdata.Append(" from zz where zz.ooc_rate=0 "); sql_sumrawdata.Append(" union "); sql_sumrawdata.Append(" select '<=30' as ooc_rate,count(*) as recipe_count "); sql_sumrawdata.Append(" from zz where zz.ooc_rate>0 and zz.ooc_rate<=30 "); sql_sumrawdata.Append(" union "); sql_sumrawdata.Append(" select '30-50' as ooc_rate,count(*) as recipe_count "); sql_sumrawdata.Append(" from zz where zz.ooc_rate>30 and zz.ooc_rate<50 "); sql_sumrawdata.Append(" union "); sql_sumrawdata.Append(" select '>=50' as ooc_rate,count(*) as recipe_count "); sql_sumrawdata.Append(" from zz where zz.ooc_rate>=50 and zz.ooc_rate<100 "); sql_sumrawdata.Append(" union "); sql_sumrawdata.Append(" select '100' as ooc_rate,count(*) as recipe_count "); sql_sumrawdata.Append(" from zz where zz.ooc_rate=100 ) mm "); sql_sumrawdata.Append(" pivot( sum(recipe_count) for ooc_rate "); sql_sumrawdata.Append(" in ('0' as ooc_rate_1,'<=30' as ooc_rate_2, '30-50' as ooc_rate_3, '>=50' as ooc_rate_4, '100' as ooc_rate_5 ) ) ) hh "); if (i > 0) { sql_sumrawdata.Append(" union "); } } sum_rawdata = ESPTDBItemInfo.TableFill("sumrawdata", sql_sumrawdata.ToString()); return sum_rawdata; } 根据上述代码,说明第0行: “Rate=0%” 第1行: “0%<Rate<=30%” 第2行: “30%<Rate<50%” 第3行: “50%<=Rate<100%” 第4行: “Rate=100%”的数据都是怎么来的
11-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值