2014-03-12 2 views
0

빠른 시나리오를 설정 한 다음 질문합니다. StorageBinID, StorageReceivedDT, StorageItem 및 StorageLocation 필드가있는 내웨어 하우스 용 DB가 있다고 가정 해 봅니다.필드에 특정 텍스트가 포함되어 있지 않은 SQL 쿼리를 반환하십시오.

단일 저장소 저장소에는 여러 항목이있어 여러 레코드가있을 수 있습니다. 그래서, 내가하려고하는 것은 특정 항목을 포함하지 않는 저장소 저장소 만 반환하는 쿼리를 만드는 것입니다. 그러나 나머지 내용은 원하지 않습니다. 예를 들어 내 창고에 5000 개의 저장소 저장소가 있으며 StorageItem 필드에 나열된 "ItemX"가없는 저장소가 몇 개 있다는 것을 알고 있습니다. ItemB 및 전체 내용이없는 모든 저장소의 전체 목록을 가져 오지 않고 StorageBinID의 짧은 목록을 반환하고 싶습니다. (나는 IN, LIKE 및 CONTAIN과 NOTS를 제외한다고 생각합니다.)

제 해결 방법은 현재 StorageReceivedDT 내에서 두 개의 쿼리를 실행하고 있습니다. 첫 번째는 날짜와 함께 수신 된 bin이고 두 번째는 ItemX를 포함하는 bin입니다. 그런 다음 두 .csv 파일을 Excel로 가져오고 ISNA (MATCH) 수식을 사용하여 두 열을 비교합니다.

쿼리를 통해 가능합니까? 어떤 조언을 주셔서 미리 감사드립니다.

+2

간단한 데이터 샘플과 예상 결과를 게시하여 쿼리를 도와 줄 수있는 이유는 무엇입니까? – ericpap

+2

해결 방법으로 활용하는 두 가지 쿼리를 포함시킬 수 있습니까? – Rich

+0

ERG! 당신의 말의 문제를 해결하고 싶지는 마십시오. 함께 할 수있는 것을 우리에게주세요. 코드, 결과 세트, 사람. – Zane

답변

0

집계 쿼리로 having 절과 함께이 작업을 수행 할 수 있습니다. 카운트가 0입니다 그냥 쓰레기통을 "ItemX는"각 빈에 표시되는 행의 수를 계산, 선택 :

select StorageBinID 
from table t 
group by StorageBinID 
having sum(case when StorageItem = "ItemX" then 1 else 0 end) = 0; 

하는 것으로 그 일부 항목이이 만 반환 쓰레기통. 빈을 완전히 비우면 결과에 나타나지 않습니다. 이 상황을 처리하는 데 충분한 정보를 제공하지 않습니다 (이 문제를 해결하는 데 필요한 StorageBins 테이블이 있다고 생각할 수도 있음).

0

어떤 종류의 SQL을 사용합니까? 당신이 주신 정보에서 , 당신은 사용할 수 있습니다

select distinct StorageBinID 
from table_name 
where StorageBinID not in (
    select StorageBinID 
    from table_name 
    where StorageItem like '%ItemX%' 
) 

당신은 테이블의 이름으로 테이블 _ 이름을 바꿔야합니다. 만 정확히 일치합니다 (StorageItem 정확히 "ItemX"으로) 원하는 경우, 당신은

where StorageItem = 'ItemX' 

또 다른 옵션 조건

where StorageItem like '%ItemX%' 

를 교체해야합니다 (빨리해야합니다) :

select StorageBinID 
from table_name 
minus 
select StorageBinID 
from table_name 
where StorageItem like '%ItemX%' 
관련 문제