如何在已有的SQL查询的语句中,再添加一个查询条件?

两个表,一个表是TBL_TicketBasic,里面存储了票号、票据时间、票据状态等信息;另一个表是TBL_TicketType,里面只有票据类型,票据类型分为客票和货票... 两个表,一个表是TBL_TicketBasic,里面存储了票号、票据时间、票据状态等信息;另一个表是TBL_TicketType,里面只有票据类型,票据类型分为客票和货票两种
现在已有一个SQL查询语句实现了查询客票超期6个月,货票超期3个月的所有的票据信息(超期就是从票据时间开始)语句如下:
select * from
(select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo)as c
where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))

我要再添加一个条件,就是在以上的基础上,进一步筛选出票据状态为“未销号”的,请高手帮忙写出语句,谢谢,分数不够可追加
上面没说清楚,票据状态有很多,没有直接的“未销号”,S表示已经销号,排除S的语句怎样写?
展开
 我来答
micro0369
推荐于2018-03-22 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4065万
展开全部
select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate())
)
and c.票据状态 = ‘未销号’
)
追问
可能没描述清楚,S表示已经销号。。。排除S的语句怎么写?。。。
追答
是不要   已经销号 ,还是要  已经销号 的

下面假设不用 已销号的:

select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime ‘S'
)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiewukk
2013-07-24 · TA获得超过3207个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:828万
展开全部

可以再嵌套一个

select *
from 
(
   select * 
   from
   (
       select a.*, b.TicketTypeKind 
       from TBL_TicketBasic as a
            left join TBL_TicketType as b on a.TicketType = b.TicketTypeNo
    )as c
    where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
       or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))
)d
where d.TicketStatus not like '%S%'

----再或者用inner join 关联下

 select * 
   from
   (
       select a.*, b.TicketTypeKind 
       from TBL_TicketBasic as a
            left join TBL_TicketType as b on a.TicketType = b.TicketTypeNo
    )as c
        inner join (select * from TBL_TicketBasic(不确定状态字段在哪个表) where TicketStatus='未销号') e on a.TicketType=e.TicketType
    where (c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
        or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate()))
追问
第二个方法查了以后有错误,第一个倒是没错误可是什么也查不到啊。。。我确定我的数据库表里有数据的,奇怪了我也想这样写的,可是就是有问题
追答
我不知道你状态的哪个字段是什么 在哪个表的 ?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cedar_xu
2013-07-24 · TA获得超过440个赞
知道小有建树答主
回答量:561
采纳率:100%
帮助的人:217万
展开全部
select * from TBL_TicketBasic
left join TBL_TicketType
on TBL_TicketType.id=TBL_TicketBasic.id ---希望表里有对应ID
where 票据时间>6 and id=客票 and 票据状态=未销号

union
select * from TBL_TicketBasic
left join TBL_TicketType
on TBL_TicketType.id=TBL_TicketBasic.id ---希望表里有对应ID
where 票据时间<3 and id=货票and 票据状态=未销号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2013-07-24 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5169万
展开全部
把前面的两个or条件再用括号括起来,然后后面加and 条件就行了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
googleyeyou
2013-07-24 · TA获得超过186个赞
知道小有建树答主
回答量:269
采纳率:100%
帮助的人:130万
展开全部
在你的基础上加上
where 票据状态=‘未销号’
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式