2017-03-10 49 views
0

我想我提出的问题没有提供太多的清晰度:SQL操纵连接值

我有一个临时表存储结果ext_results。然后我有一个CTE(myTrackingData)检索预测结果。两套都有一个与主题相关的FK ID。

我想加入这两个很容易,但我的问题是myTrackingData只预测“历史”,而ext_results有历史存储为单独的主题(因此单独的ID)。

当我加入这两个时,我想要做的就是操纵ext_results,以便intsubjectID主体像历史主体中的任何人一样只返回完全匹配历史主体的id。因此,我的ext_Results获得与预测表的匹配。

我认为这个语句将作为连接值使用select来获得匹配历史记录所有主题的ID,但也许我的THEN语句是错误的,所以我得到'子查询返回多个值错误'(也许我在WHEN声明中需要WHERE子句?):

SELECT (CASE WHEN (SELECT SubjectName FROM subjects) LIKE '%History%'  
      THEN (SELECT SubjectsID FROM Subjects) 
      ELSE intSubjectID 
     END) 

请有任何建议。

+3

请提供样本数据和期望的结果。目前尚不清楚你想要做什么。 –

+0

Hi @GordonLinoff,我修改了OP。 – Imran

回答

0

所以我的预感是正确的。我只需要在我的THEN Select语句中添加where子句:

SELECT (CASE WHEN (SELECT SubjectName FROM subjects) LIKE '%History%'  
     THEN (SELECT SubjectsID FROM Subjects **WHERE SubjectName='History'**) 
     ELSE intSubjectID 
    END) 
1

我想你会使用LEFT JOIN常做这样的事情:

SELECT COALESCE(sh.SubjectsId, intSubjectID) 
FROM . . . LEFT JOIN 
    Subjects sh 
    ON sh.? = ??.?? AND 
     sh.SubjectName LIKE '%History%' 

你的问题并没有提供如何链接表信息,但是这似乎是大方向。

0

这可能是你有什么做

SELECT CASE WHEN SubjectName LIKE '%History%' 
     THEN SubjectsID ELSE intSubjectID END AS RESULT FROM subjects 
0

正确的语法,如果我的理解是正确的。你所要做的是:

在表科目中的所有行:

1,如果主旨名称中包含“历史记录”,然后返回其SubjectsID

2,如果主旨名称不包含'历史记录',而是返回一个值(intSubjectID)。我将在这里使用0作为intSubjectId。

下面是我认为作品:

SELECT CASE WHEN SubjectName LIKE '%History%' THEN SubjectsID ELSE 0 END 
FROM Subjects