我有一个表变量,在尝试过滤数据时,我有一个必须满足的条件。 用户故事 - 当HCPC_CODE包含LCS和Allowed_AMT> 0然后显示这些记录
我看到的是我在数据周围尝试括号,但它对待Allowed_AMT> 0好像它只是Where子句中的另一个条件
因此:
select * from @billingEdit where (HCPC_CODE NOT IN ('LCS%') AND ALLOWED_AMT > 0)
和
select * from @billingEdit where ALLOWED_AMT > 0
他们两个都返回了1,056条记录,但是,我正在改为忽略'NOT',甚至有一个LIKE而不是'IN'
我必须对sql server超级生锈,因为这应该不难做.....
我想做这样的事吗?
select * from @billingEdit where
((HCPC_CODE LIKE('LCS%') AND ALLOWED_AMT > 0)
OR
(HCPC_CODE NOT LIKE('LCS%')
))
select * from @billingEdit currently gives 1,069 records
select * from @billingEdit where (HCPC_CODE LIKE ('%LCS%') AND ALLOWED_AMT > 0) gives zero records as in table variable there are NO LCS (changes every hour)
select * from @billingEdit where ALLOWED_AMT > 0 -- gives 1,056 records
select * from @billingEdit where HCPC_CODE like 'LCS%' -- gives 0 records as expected for right now
答案 0 :(得分:1)
除非我遗漏了某些内容,否则只需要将“NOT IN”更改为“LIKE”并将您的通配符添加到LCS的开头。
此外,您不需要LSC周围的括号。
select * from @billingEdit where (HCPC_CODE LIKE '%LCS%' AND ALLOWED_AMT > 0) OR HCPC_CODE NOT LIKE '%LCS%'
答案 1 :(得分:0)
我说这是你提供的......
select * from @billingEdit where
((HCPC_CODE LIKE('LCS%') AND ALLOWED_AMT > 0)
OR
(HCPC_CODE NOT LIKE('LCS%')
))
答案 2 :(得分:0)
您的第三个查询应该有效。只需将LCS%
更改为%LCS%
即可。这将处理以HCPC_CODE
开头,LCS
结尾或中间有LCS
的{{1}}。考虑到您的LCS
也可能为null,您的查询应该看起来像这样 -
HCPC_CODE
这是我尝试过的sqlfiddle - > 的 Demo 强>