2014-01-26 4 views
0

나는 역할 열이 형 '수송기'의 경우 지금 RefTxt 컬럼은 데이터가 포함됩니다 다음과 같은 구조그룹에 의해 자동 가입

Txn_id Varchar 
Role Varchar 
Acid Varchar 
RefTxt Varchar 

있는 테이블을 가지고있다. 역할은 내가 쿼리

를 쓴 나는이를 위해 다음과 같은 출력

Txn_id Sender_Acid Reciever_Acid 
Tx001 SAC001  RAC001  

를 얻을 수있는 방법으로 테이블을 조회 할 값 '보낸 사람'과 '수신기'

을 차지할 수

SELECT 
    myTable.Txn_id, 
    MAX(CASE WHEN role = 'Sender' THEN myTable.acid END) AS sender_acid, 
    MAX(CASE WHEN role = 'Recipient' THEN myTable.acid END) AS recipient_acid 

FROM 
    myTable, 
    (
     SELECT txn_id, reftext 
     FROM myTable 
     WHERE role = 'Transporter' 
    ) SubQuery 
WHERE  SubQuery.txn_id = myTable.txn_id 
AND  myTable.role in ('Sender', 'Receiver') 
GROUP BY mytable.txn_id; 

각 계정을 포함하는 Sender_Acid 및 Receiver_Acid 필드와 함께 txn_id 당 하나의 행이 결과에 포함될 것으로 예상했습니다. 그러나 일부 Txn_id에 대해 Sender_acid 또는 receiver_acid가 NULL 인 두 개의 별도의 행이 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

나는 쿼리에 어떤 문제가 있는지 확실하지 않다,하지만 당신은 그것을 단순화 할 수 있습니다 : 그 식별자이기 때문에

SELECT myTable.Txn_id, 
     MAX(CASE WHEN role = 'Sender' THEN myTable.acid END) AS sender_acid, 
     MAX(CASE WHEN role = 'Recipient' THEN myTable.acid END) AS recipient_acid 
FROM myTable join 
    myTable Subquery 
    on SubQuery.txn_id = myTable.txn_id and 
     Subquery.role = 'Transporter' 
WHERE myTable.role in ('Sender', 'Receiver') 
GROUP BY mytable.txn_id; 

같은 Txn_id 어떻게 생겼는지에 대한 두 개의 행을 받고 있다면, 그것은이다 정말 다르다. 아마도 하나는 공백으로 끝납니다. 이를 확인하려면이 select을 시도 : 당신이 어떤 추가 문자를 볼 수 있도록

select '|'||myTable.Txn_id||'|', 

아이디 주위에 수직 막대를 넣어 것입니다.