关于sql多重筛选
如:select 应付金额,项目名称 from tabname where …… where 有多达10余个筛选,“应付金额”值根据筛选而有不同运算公式;
同时,又要列出不满足上述筛选条件,却要包含上述筛选结果中有的“项目名称”的所有记录(也就是要找出产生应付金额所属项目下的所有记录),并在同一个结果中反映出来。请问用何种方式可以达到要求,请给出示范语句(效率最高),谢谢。
[解决办法]
--第二個問題:
select 应付金额,项目名称 from tabname where 项目名称 in
(
select 项目名称 from tabname where
case when 应付金额 符合条件1 then 运算公式1 when 应付金额 符合条件2 then 运算公式2 when.... end
)
--完整的
select 应付金额,项目名称 from tabname where
case when 应付金额 符合条件1 then 运算公式1 when 应付金额 符合条件2 then 运算公式2 when.... end
union all
select 应付金额,项目名称 from tabname where 项目名称 in
(
select 项目名称 from tabname where
case when 应付金额 符合条件1 then 运算公式1 when 应付金额 符合条件2 then 运算公式2 when.... end
)
and not
(
case when 应付金额 符合条件1 then 运算公式1 when 应付金额 符合条件2 then 运算公式2 when.... end
)
select 应付金额,项目名称
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
)t
where flag1 <>0 and flag2 <> 0... --flag不为0表示满足条件
union all
select 应付金额,项目名称
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
)t
where flag1 =0 and flag2 = 0... --flag为0表示不满足条件