Select语句中的变量

时间:2016-02-26 01:49:32

标签: tsql sql-server-2012

这是我为获取技术编号而构建的查询。我无法让它发挥作用。我收到此错误消息:

  

子查询返回的值超过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语句中使用变量?实现这一目标的最佳方法是什么?

我知道我可以创建另一个视图并在之后加入。有没有办法在一个查询中执行此操作?

1 个答案:

答案 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语句。