【发布时间】:2017-03-07 10:30:10
【问题描述】:
我有以下两个表:
ALL_Data
id | Name | DateAsInteger
-------------------------------------
10 | gazoline | 20151230
20 | diesel | 20160101
30 | accu | 20151128
30 | battery | 20170307
我知道,将日期存储为整数不是最好的主意,但现在不能更改。
PIVOT_Data
id | SomeInfo | Name
------------------------------------
10 | xx |
20 | yy |
30 | zz |
我需要用来自ALL_Data 的最新Name 更新PIVOT_Data 表。
结果:
id | SomeInfo | Name | newest value DateAsInteger in ALL_Data
------------------------------------- -------------
10 | xx | gazoline | <-> 20151230
20 | yy | diesel | <-> 20160101
30 | zz | battery | <-> 20170307
我尝试了什么:
UPDATE a
SET a.Name = b.Name
FROM PIVOT_Data a
join ALL_Data b
ON a.id = b.id
WHERE b.DateAsInteger = (
SELECT z1.DateAsInteger
FROM ALL_Data z1 LEFT JOIN ALL_Data z2
ON (z1.id = z2.id AND z1.Ti_DateAsInteger< z2.Ti_DateAsInteger)
WHERE z2.Ti_DateAsIntegerIS NULL);
错误信息:
消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个值。子查询时不允许这样做 跟随 =、!=、、>= 或当子查询用作表达式时。 声明已终止。
我在做什么?我做错了什么愚蠢的事情吗?
我应该分组吗? 如果是,那么如何?
非常感谢任何帮助。 提前致谢!
【问题讨论】:
标签: sql sql-server join sql-update