from pch1 t0
left join opch t1 on t0.[DocEntry] =t1.[DocEntry]
where
t1.docdate<'2017-12-01' --条件1
and t0.itemcode='GD01002' -----条件2
union ----关键部分,字段一样时,可以通过union链接成一个语句,当部分查询字段没有时,可以根据类型补空或者0
select --t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
from ign1 t0
left join oign t1 on t0.[DocEntry] =t1.[DocEntry]
WHERE
t1.docdate<'2017-12-01' --条件1
and t0.itemcode='GD01002' -----条件2
group by t0.itemcode
……--后面继续就行 --第二种,建临时表
if(object_id('temp..#a') > 0)
drop table #a
create table #a
(
itemcode varchar(100),
quantity int,
docstatus int,
canceled int,
docdate date
)
insert into #a(quantity,docstatus,docstatus,canceled ,docdate)
select t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
from pch1 t0
left join opch t1 on t0.[DocEntry] =t1.[DocEntry]
where
t1.docdate<'2017-12-01' --条件1
and t0.itemcode='GD01002' -----条件2
insert into #a(quantity,docstatus,docstatus,canceled ,docdate)
select --t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
from ign1 t0
left join oign t1 on t0.[DocEntry] =t1.[DocEntry]
WHERE
t1.docdate<'2017-12-01' --条件1
and t0.itemcode='GD01002' -----条件2
group by t0.itemcode
……--继续插入数据
--最后查询
select * from #a --关于存储过程
Create proc sp_Test
(
@d date,
@code varchar(100)
)
as
begin
--这里只放一个语句,用于参数的示例,只需要将上面的语句放到存储过程中,并将参数替换就可以了
select --t0.itemcode,t0.quantity--,t1.*,t1.docstatus,t1.canceled,t1.docdate
sum(t0.quantity)
from ign1 t0
left join oign t1 on t0.[DocEntry] =t1.[DocEntry]
WHERE
t1.docdate<@d --条件1
and t0.itemcode=@code -----条件2
group by t0.itemcode
end
对于字符串类型的可以用like,既能实现模糊查找还能省去检索条件为空的判断
假设你的前台页面上放的有
姓名、酒类这两个输入检索条件的文本框
SQL语句可以这么写
select
*
from
取酒表
where
姓名
like
'王%'
and
酒类
like
'酒%'
这样既能模糊查找姓名以王开头、酒类以酒开头的
所有信息,同时还不必去判断是不是这两个条件都输入了
另外至于时间的,你可以在后台的代码文件里给每一个时间条件规定一个合理默认时间,传条件时判断一下如果前台时间控件里为空则传默认时间,不空则传填写的时间,这样有N个时间条件就只需要N个IF
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)