根据另一个表的操作结果更新不同表的列

时间:2015-08-24 15:18:57

标签: sql-server sql-server-2008 tsql sql-server-2005

我有一个像下面这样的table1有超过400k的记录。我只是展示一个例子,它看起来如何。我想写一些查询来迭代每一行并找到它的相应日期;如果帐户ID的所有日期都存在,那么我必须更新另一个table2“是”。并且,如果任何一个日期为空(对于任何帐户ID),那么我必须将table2标志更新为“否”。

这是我的源表1。

表1

 Account ID | Date
----------- |------------
   1        | 12-03-2015
   1        | 11-03-2015
   1        | 11-04-2015
   1        | 01-03-2015
   2        | 06-03-2015
   2        | 11-03-2015
   2        | Null
   2        | 01-03-2015

这就是table2结果的样子(查询执行后)

表2

Account ID | Flag
-----------|------
1          | Yes
2          | No

2,如果几天后,帐户ID日期从Null更改为实际日期(例如07-07-2015),则表2“帐户ID 2”值应从“否”更改为“是”。所以几天后Table2看起来应该是这样的

Account ID | Flag
-----------|------
1          | Yes
2          | Yes

希望我已经正确解释了。我正在考虑使用游标,但是,我不知道如何使用它并且游标真的能解决这个问题吗?有没有其他方法可以实现这一目标?但是,在网上检查,无法获得合适的解决方案,请帮忙吗?

1 个答案:

答案 0 :(得分:0)

你需要改变你的心态,不要看每一行。这是一个非常简单的基于集的解决方案。您还应该使用比DATE和Flag更好的名称,但无论如何,这将返回您所需的输出。

select AccountID
    , case MIN(case when [Date] is null then '' else [DATE] end) when '' then 'No' else 'Yes' end as Flag
from Table1
group by AccountID