SQL错误说明

时间:2014-07-12 06:35:00

标签: sql sql-server-2008 sql-server-2008-r2

我创建了一个临时表,我想更新一列,但收到错误消息。

UPDATE #volume
SET    Pending = (SELECT t1.[esc],
                         t1.[Status],
                         CONVERT(DATE, t1.[Requested Date and time (hh:mm)]),
                         (SELECT count(*)
                          FROM   tmt t2
                          WHERE  t2.[ese] = t1.[eRfx/eAuction]
                                 AND t2.[status] = 'Pending'
                                 AND CONVERT(DATE, t2.[Requested Date and time (hh:mm)]) 
                                     <= CONVERT(DATE, t1.[Requested Date and time (hh:mm)])) cnt
                  FROM   tmt t1) 

我是SQL Server新手,任何人都可以向我解释以下消息

  

当EXISTS没有引入子查询时,只能在选择列表中指定一个表达式。

原始数据

## Date      Status ##    
----------
06/16/2014   Pending
06/17/2014   Completed
06/18/2014   Completed
06/19/2014   Pending
06/20/2014   Completed

待处理状态的输出应如下所示

----------
06/16/2014     1
06/17/2014     1
06/18/2014     1
06/19/2014     2
06/20/2014     2

1 个答案:

答案 0 :(得分:1)

如他所评论的那样,该错误非常明显。子查询中的select中有多个项目,在这个上下文中您只能有一个项目。您正在将项目设置为值,因此只允许使用一个。

看起来您想要计算待处理状态的计数,包括每个日期。您可以使用相关子查询来执行此操作:

UPDATE v
    SET Pending = (select count(*)
                   from tnt
                   where tnt.status = 'Pending' and
                         tnt.date <= v.date
                  )
    FROM #volume v;