2012-02-29 2 views
4
ArticleNumber Company Storage 
01-01227  12  2 
01-01227  2  1 'filtered by company/storage in combination 
01-01227  5  1 
01-01227  12  1 'filtered by company/storage in combination 
01-44444  5  4 'filtered by not match the articlenumber 

제가 너무 필터링 할 조합 두 필드 필터링 할 함유 행 (company = 12storage = 1) 및 (company = 2storage = 1)이 결과의 필터링 설정하고 또한 필터링 될 articlenr.SQL 쿼리는

이것은 내가 생각해내는 것이지만, 그 쿼리를 작성하는 더 쉬운 방법이 틀림 없습니까?

SELECT * FROM MyTable 
where 
    (Company=2 and Storage<>1 and ArticleNumber='01-01227') 
or 
    (Company=12 and Storage<>1 and ArticleNumber='01-01227') 
or 
    (Company<>2 and Company<>12 and ArticleNumber='01-01227') 

난 후 그 결과라는 테이블을 설정하는 것입니다이 쉽게하기 위해

ArticleNumber Company Storage 
    01-01227  12  2 
    01-01227  5  1 
+0

당신은 company = 5와 storage = 1을 필터링하기를 원했고 쿼리에서 돌아오고 싶다고 말했습니다 ... –

+0

죄송합니다. 그것은 회사 2와 스토리지 1이어야합니다! 나는 그것을 지금 바꿨다. – Stefan

+0

방금 ​​두 답변을 모두 제공했습니다. –

답변

0

이 당신을 위해 무엇을 찾고 있는지 반환합니다

select * from t 
where articleNumber = '01-01227' and (
    (company != 12 or storage != 1) and 
    (company != 2 or storage != 1) 
) 

결과 :

ARTICLENUMBER COMPANY STORAGE 
01-01227  12  2 
01-01227  5  1 

을 확실히 유지이 솔루션에 가입 할 필요는 없다 빠르고 성능이 뛰어납니다. 게다가 당신은 쉽게 restrinctions을 쌍으로 계속 추가 할 수 있습니다.

+0

Great! 그것은 작동하고 엉망이 아닙니다. ;) – Stefan

+0

고마워요 :) 주위에 보자! –

0

한 가지 가능한 방법 CompanyStorage의 열이 company_storage_exclude을 말한다. 그럼 간단하게 제외 할 CompanyStorage의 쌍으로이 값을 채울, 당신은 할 수 있습니다 :

select * 
from MyTable 
where (Company,Storage) not in (select Company,Storage from company_storage_exclude) 
and ArticleNumber='01-01227'; 

나 :

select a.* 
from MyTable a 
left join company_storage_exclude b 
on (a.Company=b.Company and a.Storage=b.Storage) 
where b.Company is null and b.Storage is null 
and ArticleNumber='01-01227'; 
0
SELECT * FROM MyTable 
WHERE 
    NOT (Company=12 and Storage=1) 
AND 
    NOT (Company=5 and Storage=1) 
AND 
    ArticleNumber='01-01227' 

또는 더 나은

SELECT * FROM MyTable 
WHERE 
    NOT ((Company=12 OR Company=5) AND Storage=1) 
AND 
    ArticleNumber='01-01227' 
+1

누락 된 OP의 articlenumber 제한 –

+0

oops가 누락되었습니다 - fixed – trapper

0

이 줄에 뭔가가 있습니까?

SELECT * FROM MyTable 
where 
    ArticleNumber='01-01227' 
AND 
    (Company IN (2,12) AND Storage <> 1 
    OR 
    Company NOT IN (2,12) 
    ) 
+0

이 쿼리는 어떤 이유로 Articlenumber가 01-44444 인 행을 필터링하지 않습니다 .. – Stefan

1
SELECT * FROM MyTable 
WHERE ArticleNumber='01-01227' 
AND (Company NOT IN (2,12) OR Storage <> 1)