&引用;“动态”;sql server 2008 r2中的where语句
我需要根据select语句中的结果传递两个不同的&引用;“动态”;sql server 2008 r2中的where语句,sql,datetime,sql-server-2008-r2,case,Sql,Datetime,Sql Server 2008 R2,Case,我需要根据select语句中的结果传递两个不同的WHERE语句。我的基本查询如下 SELECT table1.taskID, table1.startTime, table1.endTime, table1.everyMinutes, table3.dlid, table3.run FROM table1 JOIN table2 ON table1.taskID = table2.taskID LEFT JOIN table3
WHERE
语句。我的基本查询如下
SELECT table1.taskID,
table1.startTime,
table1.endTime,
table1.everyMinutes,
table3.dlid,
table3.run
FROM table1
JOIN table2
ON table1.taskID = table2.taskID
LEFT JOIN table3
ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
我正在努力解决的是,如果table3.run='1'
,那么我需要包括以下内容
SELECT table1.taskID,
table1.startTime,
table1.endTime,
table1.everyMinutes,
table3.dlid,
table3.run
FROM table1
JOIN table2
ON table1.taskID = table2.taskID
LEFT JOIN table3
ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
如果table3.run='0'
我需要以下内容
SELECT table1.taskID,
table1.startTime,
table1.endTime,
table1.everyMinutes,
table3.dlid,
table3.run
FROM table1
JOIN table2
ON table1.taskID = table2.taskID
LEFT JOIN table3
ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
最后,如果table3.run='NULL',那么我不需要这两条语句
SELECT table1.taskID,
table1.startTime,
table1.endTime,
table1.everyMinutes,
table3.dlid,
table3.run
FROM table1
JOIN table2
ON table1.taskID = table2.taskID
LEFT JOIN table3
ON table1.taskID = table3.taskID
WHERE table2.active = '1'
AND (
(table3.run = '1'
and CONVERT(DATE,GETDATE())
IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid))
or (table3.run = '0'
and CONVERT(DATE,GETDATE()) NOT IN
(SELECT dldate FROM table4 WHERE dlid = table3.dlid))
or table3.run = 'NULL' -- incredibly bad idea
)
ORDER BY taskID ASC
这是如何处理
table3.run='NULL'
的情况的?仔细看看。OP专门使用字符串'NULL'
,而不是真正的(TM)NULL
。您的代码应该使用table3.run='NULL'
来满足OP,但是您使用了NULL
的相等性测试,而不是is NULL
。(我会让你用OP上的湿面条来测试一个空字符串。)@HABO谁会在头脑正常的情况下测试一个值为空的字符串?这几乎和在某些语言中合法的if=then=else一样糟糕。谢谢你的耐心,我正在学习。所以那些看起来像小整数或位的引用值不会打扰你吗?唉<代码>0,1
或错误\u成功
。