2014-01-11 2 views
1

У меня есть переменная таблицы и при попытке фильтрации данных у меня есть условие, которое должно быть выполнено. История пользователя - Когда HCPC_CODE Содержит LCS, а также Allowed_AMT> 0 Тогда отобразить эти записиSql Server не объединяет результаты, он становится взаимоисключающим

Что я вижу это, что я пытаюсь скобку вокруг данных, но это относится к Allowed_AMT> 0, как будто это просто еще одно условие в где положение

Таким образом:

select * from @billingEdit where (HCPC_CODE NOT IN ('LCS%') AND ALLOWED_AMT > 0) 

И

select * from @billingEdit where ALLOWED_AMT > 0 

Они оба возвращают 1056 записи, но я был изменения в опускаем «НЕ» и даже имел LIKE вместо «IN»

я должен быть супер ржавый с SQL сервером, как это не должно быть трудно сделать .....

я бы хотите вместо этого сделать что-то подобное?

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

'NOT IN ('ЛВП%')' вероятно, будет соответствовать всем - он не обрабатывает шаблоны LIKE. Пожалуйста, разместите * актуальный * запрос, который «не работает». – user2864740

+0

В чем вопрос? Нет ничего неоправданного в отношении 'SELECT * FROM @billingEdit WHERE HCPC_CODE LIKE '% LCS%' AND ALLOWED_AMT> 0;'. – ErikE

+0

LIKE LCS AND ALLOWED_AMT> 0 .... что не так, и если есть нулевые записи LCS, я получаю нулевые результаты –

ответ

0

Ваш третий запрос должен работать. Просто измените LCS% на %LCS%. Это обработало бы HCPC_CODE, которое начинается с LCS, заканчивается LCS или имеет LCS посередине. Учитывая ваш HCPC_CODE также может быть пустым, ваш запрос должен выглядеть следующим образом -

select * from @billingEdit 
where (HCPC_CODE like '%LCS%' and ALLOWED_AMT > 0) 
or (isnull(HCPC_CODE,'') not like '%LCS%'); 

Вот sqlfiddle, что я попробовал ->Demo

+1

SQL Fiddle Я забыл об этом. ХОРОШИЙ!! –

+0

Да, это выглядит правильно –

1

Если меня не хватает чего-то, похоже, просто нужно изменить «NOT IN» на «LIKE» и добавить подстановочные к началу ЛВП.

Кроме того, вам не нужны скобки вокруг LSC.

select * from @billingEdit where (HCPC_CODE LIKE '%LCS%' AND ALLOWED_AMT > 0) OR HCPC_CODE NOT LIKE '%LCS%' 
+0

Я получаю все записи с этим выбором * из @billingEdit, но когда я запускаю ваше заявление, я получаю нулевые записи. Поэтому нет .... Я хочу, чтобы условие where where ONLY отображало записи LCS, когда allow_amt> 0, в настоящее время есть нулевые записи с HCPC_CODE Как и LCS (изменения в работе sql в час) –

+0

Извините, я неправильно понял ваше второе условие , Кажется, ваш третий запрос должен сработать. –

+0

Этот?выберите * от @billingEdit где ((HCPC_CODE LIKE ('ЛВП%') И ALLOWED_AMT> 0) ИЛИ (HCPC_CODE НЕ НРАВИТСЯ ('ЛВП%') )) –

0

Я говорю это сделать, что вы предоставили ...

select * from @billingEdit where 
((HCPC_CODE LIKE('LCS%') AND ALLOWED_AMT > 0) 
OR 
(HCPC_CODE NOT LIKE('LCS%') 
)) 
Смежные вопросы