欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于sql多重罗选及某一个字段值依据不同筛选

更新时间: 2014-01-05 02:27:03 责任编辑: Author_N1

 

关于SQL多重筛选及某一个字段值依据不同筛选
如:select 应付金额,项目名称 from tabname where ……  where 有多达10余个筛选,“应付金额”值根据筛选而有不同运算公式;
同时,又要列出不满足上述筛选条件,却要包含上述筛选结果中有的“项目名称”的所有记录(也就是要找出产生应付金额所属项目下的所有记录),并在同一个结果中反映出来。请问用何种方式可以达到要求,请给出示范语句,谢谢。
--参考方法--


--先放到一个临时表
select 合同金额,项目名称,已付金额,flag1,flag2,flag3...,flag10
       into #temp
from 
(
select 合同金额,项目名称,已付金额,
case when 条件1 then 运算结果1 else 0 end as flag1,  
case when 条件2 then 运算结果2 else 0 end as flag2,   
case when.... end  as flag10   -- 筛选出这些项目下所有满足付款条件的记录
from tabname where 项目id  in  
(select distinct 项目id from tabname where 已付金额 < 合同金额) 
)t      -- 筛选出已付金额小于合同金额的项目
where flag1 <> 0 or flag2 <> 0 union all
  
select 合同金额,项目名称,已付金额,flag1,flag2,flag3...,flag10
from 
(
select 合同金额,项目名称,已付金额,
case when 条件1 then 运算结果1 else 0 end as flag1,  
case when 条件2 then 运算结果2 else 0 end as flag2,   
case when.... end  as flag10   
from tabname where 项目id  in  
(select distinct 项目id from tabname where 已付金额 < 合同金额) 
)t      
where flag1 = 0 or flag2 = 0


select 合同金额,项目名称,已付金额,flag1 as 应付金额 from #temp where flag1 <>0
union all select 合同金额,项目名称,已付金额,flag2 from #temp where flag2 <>0
union all select 合同金额,项目名称,已付金额,flag3 from #temp where flag3 <>0
union all select 合同金额,项目名称,已付金额,flag4 from #temp where flag4 <>0
union all select 合同金额,项目名称,已付金额,flag5 from #temp where flag5 <>0
union all select 合同金额,项目名称,已付金额,flag6 from #temp where flag6 <>0
union all select 合同金额,项目名称,已付金额,flag1 from #temp 
          where flag1 =0 and flag2=0 and flag3=0 and flag4=0 and flag5=0 and flag6=0

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:27:03
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9920/
本文WWW.DOC100.NET DOC100.NET版权所有。