2011-11-18 4 views
6

그래서 SQL Server에서 다시 작성하려고하는 MS Access에 현재 존재하는 끔찍한 쿼리가 있습니다. 기본적으로 특정 기준에 따라 필터링하려고하는 텍스트 파일에서 가져온 데이터를 얻습니다.SQL LIKE 및 IN이 포함 된 절

내 문제는 데이터가 텍스트 파일에있는 방식으로 발생합니다. 내 표는이 비슷하다

Table1 
BusinessDate DateTime 
Amount   money 
User1   varchar 
User2   varchar 
User3   varchar 
User4   varchar 
...   varchar 
User16   varchar 

내가 날짜가 다음 다른 사용자에 의해 추가 된 데이터를 16 열이 데이터 테이블이 있습니다. 이 표에는 다른 필드가 있지만이 질문에는 불필요합니다.

현재 쿼리는 userId가 무언가와 같은 15 개의 값을 필터링합니다.

SELECT * 
FROM Table1 
WHERE (User1 Like 'AB%' Or User1 Like 'CD%' Or User1 Like 'EF%'...) 
OR (User2 Like 'AB%' Or User2 Like 'CD%' Or User2 Like 'EF%'...) 

내가하려는 것은 테이블에 같은 값을 저장하여 쿼리에 참여할 수 있도록하는 것입니다. 필자는 모든 값을 모르기 때문에 와일드 카드를 사용할 필요가 있습니다. 영숫자가 가능한 조합 일 수 있기 때문입니다.

ValueTable 
AB% 
CD% 
EF% 
HI% 
... 

그럼 내 질문이 비슷한 것하지만 난

SELECT * 
FROM Table1 
WHERE User1 Like IN (SELECT Value FROM ValueTable) 
OR User2 Like IN (SELECT Value FROM ValueTable) 

이 같은 것을 할 수 있나요이 가능하다고 생각하지 않습니다 그래서 나는이 같은 테이블이 있습니까? 그렇다면 내가 완전히 엉망이기 때문에 어떤 구문을 사용해야합니다.

+0

데이터 모델은 잘못된 것입니다. 각 Table1 행에 단일 사용자/금액/businessDate에 대한 데이터가 포함되도록 데이터를 재구성 할 수 있습니까? 피벗 쿼리를 사용하여 기존 구조를 만들 수 있어야하며 필터링이 훨씬 쉬울 것입니다. –

+1

@ JimGarrison 그런 식으로 필터링하는 것이 훨씬 쉬울 것이라는 데는 동의하지만 데이터를 재구성하는 것은 어려울 것입니다. 이 파일은 70 열 이상의 데이터 열보다 훨씬 많은 필드가 있습니다. 이는 매우 어려울 것입니다. – Taryn

+3

좋은 악의 힘을 균형을 – swasheck

답변

11
SELECT * 
FROM Table1 
WHERE EXISTS (SELECT * 
       FROM ValueTable 
       WHERE User1 Like Value 
         OR User2 Like Value) 

또는 (2008 구문)

SELECT * 
FROM Table1 
WHERE EXISTS (SELECT * 
       FROM (VALUES(User1), 
          (User2), 
          (User3), 
          (User4), 
          /* ... */ 
          (User15), 
          (User16)) Users(U) 
         JOIN ValueTable 
         ON U Like Value) 
+0

완벽하게 작동합니다, 정말 고마워요. – Taryn