求一条SQL语句

liy116 2011-03-21 10:53:38
问题是这样的。

SELECT * FROM View_RESVT WHERE ((WO ='1102027') OR (JOBNO ='1102027')) and 1=1 and PRODLOC='X' order by CODE

这是在一个条件1102027下进行查询如果我需要多个呢 我要查1102024,1102021还有1102027一起的呢?


SELECT * FROM View_RESVT WHERE ((WO in ('1102027','1102024','1102021')) OR (JOBNO in ('1102027','1102024','1102021'))) and 1=1 and PRODLOC='X' order by CODE

这样可以查但是我不确定它查询的条件,查询的条件数量不确定呢?应该怎么查?

SELECT * FROM View_RESVT WHERE ((WO in ('1102027','','')) OR (JOBNO in ('1102027','',''))) and 1=1 and PRODLOC='X' order by CODE

这样的话他查询出来的数据不对
...全文
92 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
liy116 2011-03-21
  • 打赏
  • 举报
回复
SELECT * FROM View_RESVT  WHERE (WO ='1102027' OR JOBNO ='1102027') and  1=1 and PRODLOC='X' ORDER BY CODE,WO

这样很快2秒就出来了
liy116 2011-03-21
  • 打赏
  • 举报
回复
本来这些数据就是在很多个表里面查找出来的已经占用了很多了,
Mr_Nice 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 liy116 的回复:]
问题是这样的。
SQL code

SELECT * FROM View_RESVT WHERE ((WO ='1102027') OR (JOBNO ='1102027')) and 1=1 and PRODLOC='X' order by CODE

这是在一个条件1102027下进行查询如果我需要多个呢 我要查1102024,1102021还有1102027一起的呢?

SQ……
[/Quote]

查询条件不确定的情况,用拼 sql 的方式处理?

--@i,@j 拼成你想要的条件

@sql = 'select * from view_resvt where ((wo = @i) or (jobno = @j)) and 1= 1 and prodloc =''X'''
exec (@sql)

快溜 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liy116 的回复:]
引用 2 楼 wwwwgou 的回复:
SQL code
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ……
[/Quote]效率问题,你这样写一点办法都没有,索引都用不到
快溜 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liy116 的回复:]
SQL code
SELECT * FROM View_RESVT WHERE CHARINDEX('1102027',(WO,JOBNO))>0

这样吗 ?不对啊 charindex()里面好像只支持一个字段啊
[/Quote]看2楼
liy116 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwgou 的回复:]
SQL code
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ',', @str1) > 0)
……
[/Quote]
这个我也试了一下,可以实现就是查询时间有点长。。。。。
一个数据查询时间是36秒
liy116 2011-03-21
  • 打赏
  • 举报
回复
SELECT * FROM View_RESVT WHERE CHARINDEX('1102027',(WO,JOBNO))>0

这样吗 ?不对啊 charindex()里面好像只支持一个字段啊
Shawn 2011-03-21
  • 打赏
  • 举报
回复
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ',', @str1) > 0)
AND 1 = 1
AND PRODLOC = 'X'
ORDER BY CODE
Xiao_Ai_Mei 2011-03-21
  • 打赏
  • 举报
回复
charindex()
sysuleiw 2011-03-21
  • 打赏
  • 举报
回复
楼主如果实在怕效率差并且数据量很大可以参考下execute 和exec sp_execute这两者的比较,效率上后者要好一点
sysuleiw 2011-03-21
  • 打赏
  • 举报
回复
楼主试一试7楼的字符串拼接,动态查询可以满足你的不确定情况。。
Xiao_Ai_Mei 2011-03-21
  • 打赏
  • 举报
回复
想办法存储到表里,然后连接
liy116 2011-03-21
  • 打赏
  • 举报
回复
还有别的方法嘛?

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧