解决方案可能非常简单,但也许今天工作量太大,或者我只是愚蠢而且此刻无法自行解决,但我现在真的需要它。
所以,让我说我有这样的查询:
DECLARE @input BIT
SELECT A
FROM T1
WHERE (@input = 1 AND A = 3) OR (@input = 0 AND (A = 3 OR A <> 3))
我想在where子句中使用CASE
,如果输入参数等于1
,则它应该仅限制为列A
的某些值,如果它等于0
},应该允许所有值。
我在想我应该使用没有ELSE
部分的案例陈述:
CASE WHEN @input = 1 THEN A = 3 END
但在THEN
部分,它预期结果,而不是另一个条件。
答案 0 :(得分:3)
试试这个:
WHERE A = CASE WHEN @input = 1 THEN 3 ELSE A END
答案 1 :(得分:2)
for SQL 2012 +
WHERE A = IIF(@input = 1,3,A)
答案 2 :(得分:2)
所以,让我们把这个代码分开:
def process_one():
def one():
while True:
print("one")
time.sleep(1)
def two():
while True:
print("two")
time.sleep(1)
def three():
while True:
print("three")
time.sleep(1)
a = Thread(target=one)
b = Thread(target=two)
c = Thread(target=three)
a.start()
b.start()
c.start()
if __name__ == '__main__':
p1 = Process(target=process_one)
p1.start()
DECLARE @input BIT
SELECT A
FROM T1
WHERE (@input = 1 AND A = 3) OR (@input = 0 AND (A = 3 OR A <> 3))
将始终评估为A = 3 OR A <> 3
,因此毫无意义。我们将其删除。
true
由于WHERE (@input = 1 AND A = 3) OR @input = 0
有点,它只能有@input
,0
或1
- 所以我们可以进一步简化它:
null
现在,如果是WHERE @input != 1 OR A = 3
,则仅记录将返回@input = 1
的记录,如果A = 3
或@input = 0
,则会返回所有记录。
所以完整的脚本变成了这个:
@input is null
使用DECLARE @input BIT
SELECT A
FROM T1
WHERE @input != 1 OR A = 3
表达式,更简单,更优雅,恕我直言......