我有一个查询,其中有多个条件基于参数
select a,b,c,d from xyz where
case p='Closed' then (q-r)=0
case p='Pending' then (q - isnull(r,0) )>0
case P='All' then all records to be display
它在行大小写
附近给出了错误的语法答案 0 :(得分:1)
您可以使用多个逻辑对执行此操作,如下所示:
select a,b,c,d
from xyz
where
(p='Closed' AND (q-r)=0)
OR (p='Pending' AND (q - isnull(r,0) )>0)
OR (P='All')
这个想法是其中一个案例是真的,如果是这样的话,它确保它的配对条款也是如此。
答案 1 :(得分:0)
请建议我根据参数值改变'where condition'的其他解决方案,
因为在给定的sql (问题)中,'其中'条件取决于参数 p 值。 您可以在给定的语法中看到,如果参数值发生变化,条件也会发生变化。
在第一种情况下,如果p ='已关闭'则 select ...其中q-isnull(r,0)= 0
如果p ='等待'那么
选择...其中(q - isnull(r,0))> 0
在第一种情况下,它将'等于'条件 &安培;在下一个示例中,'大于'零值。
与第三种情况一样,我想显示所有记录。
这里的问题是'case'结构只返回一个值而不是表达式。
答案 2 :(得分:0)
好的,我得到了上述问题的解决方案
select a,b,c,d from xyz where
case p='Closed' then (q-r)=0
case p='Pending' then (q - isnull(r,0) )>0
case P='All' then all records to be display
select a,b,c,d from xyz where
1 =
CASE
WHEN p='Closed' AND (q-r)=0 THEN 1
WHEN p='Pending' AND (q - isnull(r,0) )>0 THEN 1
WHEN p='All' THEN 1
ELSE 0
END
而不是p='Closed' then (q-r)=0
使用p='Closed' AND (q-r)=0 THEN 1