我可以使用子查询连接字符串吗?
问题描述:
我甚至不知道如何正确地说出这个问题。我正在尝试编写一个查询案例(状态:关闭)的查询,检查特定用户是否输入了一个便笺,如果是,请检查该便笺后面是否添加了便条(该便条会说明案件重新开放或不)。下面是我有:我可以使用子查询连接字符串吗?
SELECT DISTINCT scr.CaseId, scr.AssignedSRIdent, s.RepFullName FROM dbo.SupportCaseRoot scr
INNER JOIN #comparison1 c ON c.CaseId = scr.CaseId
INNER JOIN #comparison2 c2 ON c2.CaseId = scr.CaseId
INNER JOIN dbo.servicereproot s ON s.SRIdent = scr.SRIdent
INNER JOIN dbo.SupportCaseNote scn ON scn.CaseId = scr.CaseId
WHERE scr.StatusId IN (4, 36, 37, 39, 28)
AND c.DateCreated > c2.DateCreated
AND scn.Description LIKE '%status%of%' + ' ' + (SELECT scs.Description FROM dbo.SupportCaseStatus scs WHERE scs.StatusId NOT IN (4, 36, 37, 39, 28))
ORDER BY scr.CaseId
当我运行它,我得到这个错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我假设的最后一个AND语句和我在级联愚蠢的尝试,因为。我希望它找到“[找到所有描述]的状态”。任何人有任何建议?
答
你可以使用一些解决方案:
- 使用“顶部1”或“行偏移”久违的子查询或单个值
- 使用聚合函数返回单一(为前像Max。)在子查询或值
- 与一个函数返回
答
这里的误差是在子表返回更个单值替换该子查询一个值。
隔离子查询并查看您获得的结果。子查询最多需要返回一个结果才能“可连接”。
答
尝试在子查询中相匹配,就像这样:
SELECT DISTINCT scr.CaseId, scr.AssignedSRIdent, s.RepFullName
FROM dbo.SupportCaseRoot scr
INNER JOIN #comparison1 c ON c.CaseId = scr.CaseId
INNER JOIN #comparison2 c2 ON c2.CaseId = scr.CaseId
INNER JOIN dbo.servicereproot s ON s.SRIdent = scr.SRIdent
INNER JOIN dbo.SupportCaseNote scn ON scn.CaseId = scr.CaseId
WHERE scr.StatusId IN (4, 36, 37, 39, 28)
AND c.DateCreated > c2.DateCreated
AND EXISTS(
SELECT 1 FROM dbo.SupportCaseStatus scs WHERE scs.StatusId NOT IN (4, 36, 37, 39, 28)
AND scn.Description LIKE ('%status%of%' + ' ' + scs.Description)
)
ORDER BY scr.CaseId