我必须根据条件运行SQL查询。 只有满足它们的if条件时,才需要执行2个AND条件。我们可以在这里使用CASE声明吗?如果是这样的话?还是有其他方法??
SELECT * FROM MyTable
WHERE col1=@val1
if condition1 here
AND col2 = @val2
end if
if condition2 here
AND col3 = @val3
end if
请有人帮我这个。我正在使用sql server 2005。
答案 0 :(得分:8)
在查询中包含它们,如下所示:
SELECT * FROM MyTable
WHERE col1=@val1
And (Not Condition1 Or col2 = @val2)
And (Not Condition2 Or col3 = @val3)
所以,如果不不是条件1(意思是:条件1为真)那么col2(必须)= @ val2。
(我将第二个条件逻辑更改为AND col3 = @ val3,因为您重复了AND col2 = @ val2 )
修改以回应评论: 给我一个条件1的标准的例子。在t-sql中的查询中未使用显式 if 语法。假设第一个重要标准,“之前的订单”必须小于20,并且。 。 。如果没有名字,第二个标准就是重要的。它是:
SELECT * FROM MyTable
WHERE col1=@val1
And (MyTable.OrderCount > 19 Or col2 = @val2)
And ((Not MyTable.FirstName Is Null) Or col3 = @val3)
不要以这种方式来考虑它“如果这种情况属实,这个标准很重要”。所有重要的因素都会进入where子句。您必须了解Or / And / Not和操作顺序。这需要练习才能变得更好。如果你需要思考几分钟,不要担心,有时我们其他人也会这样做。
答案 1 :(得分:2)
假设条件可以写成SQL表达式:
SELECT * FROM MyTable
WHERE col1=@val1 AND
(NOT(condition_1) OR col2 = @val2) AND
(NOT(condition_2) OR col3 = @val3)
答案 2 :(得分:1)
SELECT * FROM MyTable
WHERE col1=@val1 AND ((condition1 AND col2=@val2) OR (condition2 AND col2=@val2))
因此,如果condition1为true,它将评估col2 = @ val2,如果condition1为false,它将转到OR(condition2,并执行相同的操作。
答案 3 :(得分:1)
您需要阅读的两个非常重要的页面是:
以下内容涵盖SQL 2000和SQL 2005 http://www.sommarskog.se/dyn-search-2005.html
这个特定于SQL 2008。 http://www.sommarskog.se/dyn-search-2008.html
答案 4 :(得分:1)
如果列不可为空(don't criticise, try it)
SELECT
*
FROM
MyTable
WHERE
col1 = @val1 AND
col2 = ISNULL(@val2, col2) AND
col3 = ISNULL(@val2, col3)
否则(语句级别重新编译使其在SQL Server 2005 +上可接受)
if condition1 here
SELECT * FROM MyTable
WHERE col1=@val1AND col2 = @val2
if condition2 here
SELECT * FROM MyTable
WHERE col1=@val1AND col3 = @val3
else
SELECT * FROM MyTable
WHERE col1=@val1
或使用提供的其他解决方案
答案 5 :(得分:0)
我假设你想要有两个不同的条件和col / val对,而不是你帖子中的那个。
如果“条件”是查询上下文中存在的内容(即不是外部因素),那么您可以执行以下操作:
SELECT * FROM MyTable
WHERE col1 = @val1
AND (NOT condition1 OR (condition1 AND col2 = @val2))
AND (NOT condition2 OR (condition2 AND col3 = @val3))
编辑:好的,所以“conditionX AND”是多余的,但我认为这对于文档来说是一个好主意,因为它明确了构造的意图。
答案 6 :(得分:0)
这些天,人们对SQL一无所知......太棒了......
SELECT *
FROM MyTable
WHERE col1=@val1
and case when condition1 then col2 = @val2 else 1=1 end
and case when condition2 then col3 = @val3 else 1=1 end