我试图使用下面的查询更新表的一个列。但我犯了个错误
聚合可能不会出现在UPDATE语句的集合列表中。
代码:
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‘
这里面怎么了?
发布于 2014-07-28 08:56:15
您需要将聚合放在临时表或子查询中,并且需要一个显式的GROUP BY
语句。
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';
发布于 2014-07-28 08:56:22
我想这能做你想做的事。我删除了化名,以使它尽可能清楚:
UPDATE Table1
SET InDate = (
SELECT MIN(Table2.Date)
FROM Table2
WHERE Table1.ID1 = Table2.ID2
AND Table2.Code = 'IN'
)
发布于 2014-07-28 08:56:23
您可以使用apply获取min日期,然后在update语句中使用它:
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
https://stackoverflow.com/questions/25000093
复制