这是我为获取技术编号而构建的查询。我无法让它发挥作用。我收到此错误消息:
子查询返回的值超过1。
查询:
declare @TechNum int =
(Select Case When CF_Technician='David' Then 9 When
CF_Technician='David N' Then 9 When
CF_Technician='David Nunez' Then 9 When
CF_Technician='Joe Nicholson' Then 8 When
CF_Technician='Joe Nicholson' Then 8 When
CF_Technician='Josh Fogleman' Then 7 When
else 0
End
From OptimazationItems)
Select
ItemID,
TechNum=@TechNum
From
OptimazationItems
有什么问题?为什么我不能在select语句中使用变量?实现这一目标的最佳方法是什么?
我知道我可以创建另一个视图并在之后加入。有没有办法在一个查询中执行此操作?
答案 0 :(得分:0)
您可以使用变量,但是您已为其分配了一个返回最多一行的子查询。您指定的子查询显然会返回多行。单独运行子查询,您将看到它返回多行。
将子查询重写为仅返回(最多)一行。您可能希望添加WHERE
子句或SELECT TOP 1
+ ORDER BY some_column
来选择特定行。
从评论中可以看出你并不理解我在说什么。你可能想写的是以下内容。
SELECT
ItemID,
TechNum=CASE CF_Technician
WHEN 'David' THEN 9
WHEN 'David N' THEN 9
WHEN 'David Nunez' THEN 9
WHEN 'Joe Nicholson' THEN 8
WHEN 'Joe Nicholson' THEN 8
WHEN 'Josh Fogleman' THEN 7
ELSE 0
END
FROM
OptimazationItems
您无法使用变量编写此select语句。