2013-10-16 31 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字段。 –

相关问题