Sql Server没有结合结果,它变得互相排斥

时间:2014-01-11 01:03:18

标签: sql sql-server tsql where-clause

我有一个表变量,在尝试过滤数据时,我有一个必须满足的条件。 用户故事 - 当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 

3 个答案:

答案 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