这样的东西能用一个SQL语句搞出来么

copico 2006-12-05 09:40:07
RSC_CD HC_STATUS2 IS_FULLFILL TAT R_REPAIR

Y010 B N 178 Y
A010 D Y 112 N
C010 B N 157 Y

怎么能用最少的最高效果SQL语句,最好效果要高,因为数据量比较大算出

当 HC_STATUS2 in ('B','C') / HC_STATUS2 in ('B','C','D','V')

IS_FULLFILL = 'Y' / ALL

TAT的平均数量

R_REPAIR = 'Y' /all

当然不用查询出来,保存为变量也可以,最重要的代码要精,要效率

日前我的笨办法是要一个结果,就查询一次,然后再做相除,总供做了8次查询,我觉得很不效率,有其它办法么


...全文
204 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
copico 2006-12-05
  • 打赏
  • 举报
回复
ok,结帖
Yang_ 2006-12-05
  • 打赏
  • 举报
回复
select
case when sum(case when HC_STATUS2 in ('B','C','D','V') then 1 else 0 end)=0 then 0 else 1.0*sum(case when HC_STATUS2 in ('B','C') then 1 else 0 end)/sum(case when HC_STATUS2 in ('B','C','D','V') then 1 else 0 end) end as data1,
1.0*sum(case when IS_FULLFILL = 'Y' then 1 else 0 end)/sum(1) as data2,
avg(TAT) as data3,
1.0*sum(case when R_REPAIR = 'Y' then 1 else 0 end)/sum(1) as data4
from tablename
copico 2006-12-05
  • 打赏
  • 举报
回复

Yang_(扬帆破浪)
的OK,可是如果sum(case when HC_STATUS2 in ('B','C','D','V') = 0 了怎么办
冷箫轻笛 2006-12-05
  • 打赏
  • 举报
回复
Yang_(扬帆破浪) 正解!!
dawugui 2006-12-05
  • 打赏
  • 举报
回复
你干脆给个结果吧.
不然头大.
copico 2006-12-05
  • 打赏
  • 举报
回复
IS_FULLFILL = 'Y' / ALL
的意思是
求出 IS_FULLFILL = 'Y' 的值,和总记录数,然后求除法
marco08 2006-12-05
  • 打赏
  • 举报
回复
沒看懂, 學習
Yang_ 2006-12-05
  • 打赏
  • 举报
回复
select
1.0*sum(case when HC_STATUS2 in ('B','C') then 1 else 0 end)/sum(case when HC_STATUS2 in ('B','C','D','V') then 1 else 0 end) as data1,
1.0*sum(case when IS_FULLFILL = 'Y' then 1 else 0 end)/sum(1) as data2,
avg(TAT) as data3,
1.0*sum(case when R_REPAIR = 'Y' then 1 else 0 end)/sum(1) as data4
from tablename





冷箫轻笛 2006-12-05
  • 打赏
  • 举报
回复
...

没看懂
dawugui 2006-12-05
  • 打赏
  • 举报
回复
当 HC_STATUS2 in ('B','C') / HC_STATUS2 in ('B','C','D','V')

IS_FULLFILL = 'Y' / ALL

TAT的平均数量

R_REPAIR = 'Y' /all

上面的这些看不懂.

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧