我有一个看起来像这样的表:
ID | Start | End | Flag1 | Flag2
--------------------------------------------
1 | 1900-01-01 | 1900-01-01 | 0 | 1
1 | 1900-01-01 | 2000-01-01 | 1 | 0
2 | 2010-01-01 | 2020-01-01 | 0 | 0
对于ID的任何日期范围,标志1和2可以设置为1或0.对于第一个记录,他只是flag2。对于第二个记录,他只是flag1。
有没有办法以标志在开始日期和结束日期的交集中都为1的方式更新记录?基本上:
ID | Start | End | Flag1 | Flag2
--------------------------------------------
1 | 1900-01-01 | 1900-01-01 | 1 | 1
1 | 1900-01-02 | 2000-01-01 | 1 | 0
2 | 2010-01-01 | 2020-01-01 | 0 | 0
我尝试过使用group by但它没有按预期返回结果集。 任何帮助,将不胜感激。非常感谢你!
答案 0 :(得分:1)
您需要使用自我加入来获得所需的结果。
UPDATE t1
SET t1.Flag1 = 1, t1.Flag2 = 1
FROM
mytable t1 join mytable t2 on t1.ID = t2.ID
WHERE t1.Start_Date = t2.End_Date
答案 1 :(得分:1)
为什么不呢?
UPDATE [mytable] SET [flag1] = 1, [flag2] = 1 WHERE [startdate] = [enddate]