同时,又要列出不满足上述筛选条件,却要包含上述筛选结果中有的“项目名称”的所有记录(也就是要找出产生应付金额所属项目下的所有记录),并在同一个结果中反映出来。请问用何种方式可以达到要求,请给出示范语句,谢谢。
9 个解决方案
#1
选择列:项目名称,合同金额
条件1:a=b (合同金额=t-r)
条件2:a>b (合同金额=t-j)
条件3:a<b (合同金额=t+e)
条件4:c<a (合同金额=t-p)
……
假设:数据表中,项目名称有30个,通过上述条件检索出来有5个不同的项目名称,检索出来的记录有100条。现在要在这个数据表中同时检索包含上述条件检索出来的5个不同的项目名称下的所有未在上述检索条件下检索出来的记录(同一个项目名称下有许多记录)并在一个结果中反映出来。谢谢。
条件1:a=b (合同金额=t-r)
条件2:a>b (合同金额=t-j)
条件3:a<b (合同金额=t+e)
条件4:c<a (合同金额=t-p)
……
假设:数据表中,项目名称有30个,通过上述条件检索出来有5个不同的项目名称,检索出来的记录有100条。现在要在这个数据表中同时检索包含上述条件检索出来的5个不同的项目名称下的所有未在上述检索条件下检索出来的记录(同一个项目名称下有许多记录)并在一个结果中反映出来。谢谢。
#2
请提供效率最高的方式
#3
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
)
#4
合同金额=t-Icase(a=b,r,a>b,j,a<b,-e,c<a,p)
#5
我的目的是:1、在合同表中筛选出符合付款条件的记录产生应付款金额,这些记录归属于三个不同的项目(假如共有10个不同的项目)。
2、筛选出不符合付款条件的但是归属于这三个项目的记录(应付款额为零)并在一个结果集中显示。
2、筛选出不符合付款条件的但是归属于这三个项目的记录(应付款额为零)并在一个结果集中显示。
#6
项目名称 合同金额 已付金额 付款日期
a 100 10 2013.11.06
b 100 100 2013.11.09
c 100 0 2013.05.02
a 50 0 2013.12.03
我需要的结果:
项目名称 合同金额 已付金额 付款日期 应付金额
a 100 10 2013.11.06 100-10 满足付款条件
c 100 0 2013.05.02 100-0 满足付款条件
a 50 0 2013.12.03 0 不满足付款条件
#7
为什么没有B?简要说明一下结果是怎样得出的
#8
我要知道产生应付账款的项目下共有多少合同(这样可以看出该项目的资金运行情况),未产生应付账款的项目无需考虑。上例*有abc三个项目,ac产生了应付账款,所以,结果中,c项目下共有一条记录,a项目下共有两条记录,b没有产生应付账款,不在统计之列。 结果就是这样产生的。
#9
--先放到一个临时表
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
#1
选择列:项目名称,合同金额
条件1:a=b (合同金额=t-r)
条件2:a>b (合同金额=t-j)
条件3:a<b (合同金额=t+e)
条件4:c<a (合同金额=t-p)
……
假设:数据表中,项目名称有30个,通过上述条件检索出来有5个不同的项目名称,检索出来的记录有100条。现在要在这个数据表中同时检索包含上述条件检索出来的5个不同的项目名称下的所有未在上述检索条件下检索出来的记录(同一个项目名称下有许多记录)并在一个结果中反映出来。谢谢。
条件1:a=b (合同金额=t-r)
条件2:a>b (合同金额=t-j)
条件3:a<b (合同金额=t+e)
条件4:c<a (合同金额=t-p)
……
假设:数据表中,项目名称有30个,通过上述条件检索出来有5个不同的项目名称,检索出来的记录有100条。现在要在这个数据表中同时检索包含上述条件检索出来的5个不同的项目名称下的所有未在上述检索条件下检索出来的记录(同一个项目名称下有许多记录)并在一个结果中反映出来。谢谢。
#2
请提供效率最高的方式
#3
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
)
#4
合同金额=t-Icase(a=b,r,a>b,j,a<b,-e,c<a,p)
#5
我的目的是:1、在合同表中筛选出符合付款条件的记录产生应付款金额,这些记录归属于三个不同的项目(假如共有10个不同的项目)。
2、筛选出不符合付款条件的但是归属于这三个项目的记录(应付款额为零)并在一个结果集中显示。
2、筛选出不符合付款条件的但是归属于这三个项目的记录(应付款额为零)并在一个结果集中显示。
#6
项目名称 合同金额 已付金额 付款日期
a 100 10 2013.11.06
b 100 100 2013.11.09
c 100 0 2013.05.02
a 50 0 2013.12.03
我需要的结果:
项目名称 合同金额 已付金额 付款日期 应付金额
a 100 10 2013.11.06 100-10 满足付款条件
c 100 0 2013.05.02 100-0 满足付款条件
a 50 0 2013.12.03 0 不满足付款条件
#7
为什么没有B?简要说明一下结果是怎样得出的
#8
我要知道产生应付账款的项目下共有多少合同(这样可以看出该项目的资金运行情况),未产生应付账款的项目无需考虑。上例*有abc三个项目,ac产生了应付账款,所以,结果中,c项目下共有一条记录,a项目下共有两条记录,b没有产生应付账款,不在统计之列。 结果就是这样产生的。
#9
--先放到一个临时表
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