我有一个带有作业#和后缀的表。我正在尝试创建的查询选择一系列作业#/后缀条目,其后缀取决于作业#。例如:
Job # Suffix
-------- -----------
00000001 001
00000001 002
00000001 003
00000002 001
00000002 002
00000002 003
00000002 004
00000003 001
00000003 002
00000003 003
00000003 004
我有四个输入。一对是起始作业/后缀,然后是结束作业/后缀。如果用户输入:
开始:00000001/002
结束:00000002/002
他们会得到以下结果:
Job # Suffix
-------- -----------
00000001 002
00000001 003
00000002 001
00000002 002
我想知道在我的存储过程中的一个select语句中是否有一种简单的方法可以做到这一点。到目前为止,我认为这样做的唯一方法是首先将作业选择到表变量中,然后使用另一个查询过滤后缀。
这看起来很简单,但很难将我的大脑包裹在这个周围。
谢谢!
答案 0 :(得分:6)
你走了:
DECLARE @t TABLE (jobnum varchar(10), suffix varchar(3))
INSERT INTO @t (jobnum, suffix) VALUES ('00000001', '001')
INSERT INTO @t (jobnum, suffix) VALUES ('00000001', '002')
INSERT INTO @t (jobnum, suffix) VALUES ('00000001', '003')
INSERT INTO @t (jobnum, suffix) VALUES ('00000002', '001')
INSERT INTO @t (jobnum, suffix) VALUES ('00000002', '002')
INSERT INTO @t (jobnum, suffix) VALUES ('00000002', '003')
INSERT INTO @t (jobnum, suffix) VALUES ('00000002', '004')
INSERT INTO @t (jobnum, suffix) VALUES ('00000003', '001')
INSERT INTO @t (jobnum, suffix) VALUES ('00000003', '002')
INSERT INTO @t (jobnum, suffix) VALUES ('00000003', '003')
INSERT INTO @t (jobnum, suffix) VALUES ('00000003', '004')
DECLARE @Startjob VARCHAR(10)
DECLARE @Startsuf VARCHAR(3)
DECLARE @Endjob VARCHAR(10)
DECLARE @Endsuf VARCHAR(3)
SET @Startjob='00000001'
SET @Startsuf='002'
SET @Endjob='00000002'
SET @Endsuf='002'
;WITH raw AS
(
SELECT jobnum, suffix, ind=RIGHT('0000000000'+ISNULL(jobnum,''),10)+RIGHT('000'+ISNULL(suffix,''),3)
FROM @t
)
SELECT *
FROM raw
WHERE ind BETWEEN
RIGHT('0000000000'+ISNULL(@Startjob,''),10)+RIGHT('000'+ISNULL(@Startsuf,''),3)
AND
RIGHT('0000000000'+ISNULL(@Endjob,''),10)+RIGHT('000'+ISNULL(@Endsuf,''),3)
为了处理短长度和空值,有一堆无关的字符串操作。
答案 1 :(得分:1)
我不完全确定你要做什么,但是快速猜测是这样的......
SELECT * FROM tbl
WHERE ( job + suffix*0.001 )
BETWEEN (starting_job + suffix*0.001) AND (ending_job + suffix*0.001)
这样可行,因为看起来似乎后缀是次要数字。基本上,您将序列化为“job.suffix”并选择您在集合范围之间的位置。如果可以,请在(start_job + suffix*0.001)
上创建索引。这也假定后缀为numeric(3)
答案 2 :(得分:1)
您应该能够将2个查询中的where子句合并为1。
像
这样的东西SELECT ...
WHERE
JOB# BETWEEN '00000001' and '00000002'
AND Suffix BETWEEN '001' and '002'
编辑: 更新后我会做
SELECT ...
WHERE
JOB# + Suffix BETWEEN '00000001002'+ and '00000002002'
我假设值是前导0的字符串
答案 3 :(得分:1)
我认为你需要在where子句中进行计算。
SELECT Table1.JOB, Table1.SUF
FROM Table1
WHERE (((Table1.JOB)>="00001" And (Table1.JOB)<="00002") AND (([JOB] & [SUF])>="00001002" And ([JOB] & [SUF])<="00002002"));