2017-12-13 6 views
0

내가 검색을 시도했지만 아마 비슷한 게시물을 찾을 수있는 언어가 부족 CASE 문에도 불구하고 만드는 중복 가입, 그래서 여기 내 기본적인 문제
(SQL Server 2016) ...하나는

의 I 고유 식별하는 쿼리가 고객 조우 (1 line per 1 transaction). 그런 다음 고객이 다른 테이블에서 구입 한 품목을 가져 오려고합니다. 그들이 다수 품목을 산 경우에, 결합 테이블은 그 품목의 순위를 나타 내기 위하여 "선"란 분야에 ​​그 거래를 여러 번 열거한다.

표 2 :

Transaction--Line--Item 

1000--1--Staples 

1000--2--Stapler 

1001--1--Paper 

내가 할 내 쿼리의 최종 결과를 원하는 : 표 1 : 나는 현재 내 SELECTCASE 문을 사용하여이 작업을 수행하려고

Customer--Transaction--Item1--Item2 

John Doe--1000--Staples--Stapler 

Jane Smith--1001--Paper--NULL 

을 :

SELECT Table1.Customer, 

Table1.Transaction, 

CASE WHEN Table2.LINE = 1 THEN Table2.Item 
       ELSE NULL 
       END as Item1 

CASE WHEN Table2.LINE = 2 THEN Table2.Item 
       ELSE NULL 
       END as Item2 

FROM Table1 left outer join Table2 on Table1.transaction=Table2.transaction 

이렇게하면 올바른 결과를 얻을 수 있습니다. 들, 많은 참여로 하나가 중복 행

John Doe--1000--Staples--NULL 

John Doe--1000--NULL--Stapler 

Jane Smith--10001--Paper--NULL 

에 이들을 배치된다는 점을 제외하고 나는 하나의 행에 John Doe 모두를 원한다. 초기 쿼리 후 두 개의 별도의 업데이트 문을 실행하는 것 외에는 원하는 결과를 얻는 방법을 모르겠습니다. 도움?

(못된 형식에 대한 사과) 아래

답변

0

작동합니다. 적어도 Table2에 진입 할 것으로 가정하면

SELECT Table1.Customer, 
Table1.Transaction, 
t1.Item AS Item1, 
t2.Item as Item2 
FROM Table1 
INNER JOIN Table2 t1 
    on c.transactions=t1.tid 
left outer join Table2 t2 
    on Table1.transaction=t2.transaction AND t2.Line=2 
where t1.line=1 
+0

제안 해 주셔서 감사합니다. WHERE 절은 Line = 1이 아닌 조회에서 제외됩니다. 아마도 훨씬 복잡한 쿼리를 단순화하고 있다고 덧붙여 야합니다. 적어도 7 개의 다른 왼쪽 조인이 있지만 이것은 여러 결과 문제에 대해 하나의 트랜잭션이있는 유일한 것입니다. – DMC97

+0

다른 옵션은 다음과 같은 것이 있습니다. '(트랜잭션 = table.transaction 및 Line = 1 인 Table2의 항목 선택) item1, (트랜잭션이 table.transaction 및 Line 인 항목 선택 = 2) 끝은 항목 2, –