2013-10-16 33 views
1

我有兩列的一行報告,我想基於SQL表中的同一列。基於同一表列的一行的兩個值的SQL查詢

例如,在報告中,應該是這樣的:

ID | Reason  | SubReason 
1 | Did not like | Appearance 

在SQL表是這樣的:

ID | ReturnReason 
1 | Did not like 
1 | XX*SR*Appearance 
1 | XX - TestData 
1 | XX - TestData2 

被新加入的SubReason柱和電流SQL查詢是這樣的:

SELECT ID, ReturnReason AS 'Reason' 
FROM table 
WHERE LEFT(ReturnReason,2) NOT IN ('XX') 

而現在我會喜歡e在SubReason的SELECT語句中添加一列,如果*SR*在該值中,則該值應爲該值。然而,這將不起作用,因爲它的值中還有'XX',該值在當前的WHERE子句中被省略。

+5

我討厭這樣設計的數據庫! – jp2code

回答

2
SELECT t.ID, t.ReturnReason AS 'Reason', 
SUBSTRING(t1.ReturnReason,7,10000) as 'SubReason ' 
FROM t 
LEFT JOIN t as t1 on t.id=t1.id and t1.ReturnReason LIKE 'XX*SR*%' 
WHERE t.ReturnReason NOT LIKE 'XX%' 

SQLFiddle demo

+0

Hi @valex,這確實產生了我想要的結果,但是,一旦添加JOIN,查詢需要很長時間才能運行(從真正的快速運行到大約5分鐘)。任何想法爲什麼發生這種情況?難道是因爲該表大約爲18GB,並且查詢正在加入它? –

+0

如果你不能改變表設計嘗試在ID和ReturnReAson字段上添加索引 – valex

+0

我不打算改變表設計或添加索引如果可能的話,有沒有其他的方法可以查詢或方法可能工作?該ID有一個索引,但不包含ReturnReason字段。 –

相關問題