2014-01-26 93 views
0

我有一個表結構如下GROUP BY和自加入

Txn_id Varchar 
Role Varchar 
Acid Varchar 
RefTxt Varchar 

現在RefTxt列將只包含數據時角色列類型是「轉運」的。角色也可以佔用值「發件人」和「接收器」

我要查詢表中這樣的我寫的查詢

的方式,我得到以下輸出

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; 

我期望結果包含每個txn_id的單行,其中包含各個帳戶的Sender_Acid和Receiver_Acid字段。但是,對於某些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,這是因爲這些ID是真的不同。也許一個以空間結束。看到這一點,試試這個select

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

,將放在豎線周圍的ID,所以你可以看到任何多餘的字符。