我在'tableA'中有一个列,我想用以下查询的结果更新。基本上,第5个日期列将是同一行中其他4列的最大日期。
select
Case
when date1 >= date2 and date1 >= date3 and date1 >=date4 then date1
when date2 >= date1 and date2 >= date3 and date2 >=date4 then date2
when date3 >= date1 and date3 >= date2 and date3 >=date4 then date3
when date4 >= date1 and date4 >= date2 and date4 >=date3 then date4
End as Date5
from
tableA
但是我无法在update语句中获得正确的语法,因为我得到多行错误或其他类型的错误。例如
update tableA a
set Date5 = (
select
Case
when date1 >= date2 and date1 >= date3 and date1 >=date4 then date1
when date2 >= date1 and date2 >= date3 and date2 >=date4 then date2
when date3 >= date1 and date3 >= date2 and date3 >=date4 then date3
when date4 >= date1 and date4 >= date2 and date4 >=date3 then date4
End as Date5
from
tableA b)
where A.ID = B.ID
感谢您的帮助!
以下更新
经过一些研究后,我决定采用不同的解决方案来获得最大日期,例如
Select Max(dDate) maxDate, ID
From tableA
Unpivot (dDate FOR nDate in (Date1, Date2, Date3)) as u
Group by ID
不幸的是,这意味着我的原始问题仍然存在,即如何将上述查询组合为更新中的子查询。
答案 0 :(得分:2)
最简单的方法是
UPDATE tableA
SET date5 = (SELECT MAX(D)
FROM (VALUES(date1),
(date2),
(date3),
(date4)) T(D))
或(因为您现在添加了2005标签)
UPDATE tableA
SET date5 = (SELECT MAX(D)
FROM (SELECT date1 UNION ALL
SELECT date2 UNION ALL
SELECT date3 UNION ALL
SELECT date4) T(D))
答案 1 :(得分:1)
您不需要子查询:
update tableA a
set Date5 = Case
when date1 >= date2 and date1 >= date3 and date1 >=date4 then date1
when date2 >= date1 and date2 >= date3 and date2 >=date4 then date2
when date3 >= date1 and date3 >= date2 and date3 >=date4 then date3
when date4 >= date1 and date4 >= date2 and date4 >=date3 then date4
End
答案 2 :(得分:1)
您可以将查询结果加回原始表,并使用联接更新后者。方法如下:
UPDATE a
SET Date5 = s.maxDate
FROM TableA a
INNER JOIN (
Select Max(dDate) maxDate, ID
From tableA
Unpivot (dDate FOR nDate in (Date1, Date2, Date3)) as u
Group by ID
) s ON a.ID = s.ID