SQL操作连接值

时间:2017-03-10 15:57:05

标签: sql sql-server join

我想我没有提供太多清晰度就问了这个问题:

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

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

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

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

sed -e 's/@//g'

请提出任何建议。

4 个答案:

答案 0 :(得分:1)

我认为您通常会使用day执行此类操作:

date

您的问题并未提供有关如何关联表格的信息,但这似乎是大方向。

答案 1 :(得分:0)

这可能是您尝试做什么的正确语法

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

答案 2 :(得分:0)

如果我理解正确的话。你要做的是:

表格主题中的所有行:

1,如果subjectName包含' History',则返回其SubjectsID

2,如果subjectName不包含' History',则返回一个值(intSubjectID)。我将在这里使用0作为intSubjectId。

以下是我的想法:

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

答案 3 :(得分:0)

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

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