【求看】SQL多个条件筛选语句怎么写?

时间:2022-02-10 23:06:49
(1)select * from 流程 where 工程<>'QA入库' and 工程<>'报废'


(2)select * from 流程 where 工程<>'入库'and 工程<>'外协入库' and 日期 >'2015-11-18' order by 日期 asc


怎样将2015年以前的工程=‘入库’ 及‘外协入库’的记录都排除掉,然后再搜出不是‘QA入库’及‘报废’的记录呢?

单个加在(1)后面的话只会显示2015-11-18' 这个日期之后的记录,这个日期之前的记录也有不是入库和外协入库的,所以烦请高人帮我改写下语句



7 个解决方案

#1


其实需求描述的还是不是很清楚。我理解下。
本来:工程 排除 'QA入库' 、'报废'是统一条件;
但,突然加上了,“将2015年以前的工程=‘入库’ 及‘外协入库’”也排除。
让他俩并立。?如果是,那么试试如下。

select * from 流程 
where 
(工程 not in('入库','外协入库','QA入库','报废') and 日期 <='2015-11-18' )
or  (工程 not in('QA入库','报废') and 日期 >'2015-11-18')
order by 日期 asc

是否这个意思

#2


引用 1 楼 spiritofdragon 的回复:
其实需求描述的还是不是很清楚。我理解下。
本来:工程 排除 'QA入库' 、'报废'是统一条件;
但,突然加上了,“将2015年以前的工程=‘入库’ 及‘外协入库’”也排除。
让他俩并立。?如果是,那么试试如下。

select * from 流程 
where 
(工程 not in('入库','外协入库','QA入库','报废') and 日期 <='2015-11-18' )
or  (工程 not in('QA入库','报废') and 日期 >'2015-11-18')
order by 日期 asc

是否这个意思


就是这个意思,高人实在是高,在SQL中运行也成功了!!不过放在VB里面却运行不起来。。。
.Open "select * from 主流程 where(工程 not in('入库','外协入库','QA入库','报废','合批') and 日期 <='2015-11-16' )or  (工程 not in('QA入库','报废','合批') and 日期 >'2015-11-16')"

#3


vb还是vba?
vba中的sql可不是t-sql语法...是jet sql ,access也是jet sql。好多地方不同。报错啥?不知道报错怎么看。

#4


引用 3 楼 spiritofdragon 的回复:
vb还是vba?
vba中的sql可不是t-sql语法...是jet sql ,access也是jet sql。好多地方不同。报错啥?不知道报错怎么看。


是vba  
不报错,只是点按钮的时候没有记录。。。。咋办呢?

#5


连的是sql server么?如果确定,不用换语句。
如果连的是excel或者是access请参照jet sql语法去改。

没有错误信息,只能自己去调试了。拆解成排他情况,一步一步调吧。

#6


比如access里的日期常量 好像不用单引号,得这么写 #2015-11-18# ,不一一列举了。

#7


引用 6 楼 spiritofdragon 的回复:
比如access里的日期常量 好像不用单引号,得这么写 #2015-11-18# ,不一一列举了。

果然是日期的问题
改成这个#2015-11-18# 运行成功!!!牛!!结贴给分

#1


其实需求描述的还是不是很清楚。我理解下。
本来:工程 排除 'QA入库' 、'报废'是统一条件;
但,突然加上了,“将2015年以前的工程=‘入库’ 及‘外协入库’”也排除。
让他俩并立。?如果是,那么试试如下。

select * from 流程 
where 
(工程 not in('入库','外协入库','QA入库','报废') and 日期 <='2015-11-18' )
or  (工程 not in('QA入库','报废') and 日期 >'2015-11-18')
order by 日期 asc

是否这个意思

#2


引用 1 楼 spiritofdragon 的回复:
其实需求描述的还是不是很清楚。我理解下。
本来:工程 排除 'QA入库' 、'报废'是统一条件;
但,突然加上了,“将2015年以前的工程=‘入库’ 及‘外协入库’”也排除。
让他俩并立。?如果是,那么试试如下。

select * from 流程 
where 
(工程 not in('入库','外协入库','QA入库','报废') and 日期 <='2015-11-18' )
or  (工程 not in('QA入库','报废') and 日期 >'2015-11-18')
order by 日期 asc

是否这个意思


就是这个意思,高人实在是高,在SQL中运行也成功了!!不过放在VB里面却运行不起来。。。
.Open "select * from 主流程 where(工程 not in('入库','外协入库','QA入库','报废','合批') and 日期 <='2015-11-16' )or  (工程 not in('QA入库','报废','合批') and 日期 >'2015-11-16')"

#3


vb还是vba?
vba中的sql可不是t-sql语法...是jet sql ,access也是jet sql。好多地方不同。报错啥?不知道报错怎么看。

#4


引用 3 楼 spiritofdragon 的回复:
vb还是vba?
vba中的sql可不是t-sql语法...是jet sql ,access也是jet sql。好多地方不同。报错啥?不知道报错怎么看。


是vba  
不报错,只是点按钮的时候没有记录。。。。咋办呢?

#5


连的是sql server么?如果确定,不用换语句。
如果连的是excel或者是access请参照jet sql语法去改。

没有错误信息,只能自己去调试了。拆解成排他情况,一步一步调吧。

#6


比如access里的日期常量 好像不用单引号,得这么写 #2015-11-18# ,不一一列举了。

#7


引用 6 楼 spiritofdragon 的回复:
比如access里的日期常量 好像不用单引号,得这么写 #2015-11-18# ,不一一列举了。

果然是日期的问题
改成这个#2015-11-18# 运行成功!!!牛!!结贴给分