首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用聚合函数进行更新

使用聚合函数进行更新
EN

Stack Overflow用户
提问于 2014-07-28 16:44:26
回答 5查看 69关注 0票数 0

我试图使用下面的查询更新表的一个列。但我犯了个错误

聚合可能不会出现在UPDATE语句的集合列表中。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Test.dbo.Table1
    SET InDate = MIN(b.Date)        
FROM
    Test.dbo.Table1 a
    LEFT OUTER JOIN
    Test.dbo.Table2 b
    ON
        a.ID1 = b.ID2
        WHERE b.Code = 'IN';

我想用Table2 (b.Date)列中最老的日期更新表中的b.Date列,其中(b.code)是' in‘

这里面怎么了?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-28 16:56:15

您需要将聚合放在临时表或子查询中,并且需要一个显式的GROUP BY语句。

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Test.dbo.Table1 
SET InDate = min_date
FROM Test.dbo.Table1  c inner join   
    (SELECT a.id1, MIN(b.Date) min_date
    FROM Test.dbo.Table1 a 
    LEFT OUTER JOIN Test.dbo.Table2 b 
     ON a.ID1 = b.ID2 
    Group by a.id1) d
 ON c.ID1 = d.ID1
WHERE c.Code = 'IN';
票数 0
EN

Stack Overflow用户

发布于 2014-07-28 16:56:22

我想这能做你想做的事。我删除了化名,以使它尽可能清楚:

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE Table1
SET InDate = (
  SELECT MIN(Table2.Date)
  FROM Table2
  WHERE Table1.ID1 = Table2.ID2
    AND Table2.Code = 'IN'
)
票数 0
EN

Stack Overflow用户

发布于 2014-07-28 16:56:23

您可以使用apply获取min日期,然后在update语句中使用它:

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE a
    SET a.InDate = b.MinBDate
FROM Table1 a
OUTER APPLY
(    
    SELECT MIN(b.InDate) MinBDate
    FROM Table2 b
    WHERE b.Id = a.Id
        AND b.Code = 'IN'
) b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25000093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档