Sql 如何根据fetch cteTable更新特定字段
我想根据cteTable的结果替换DATEADD函数中的第一个和第二个参数。这可能吗?我需要创建一个参数吗?先谢谢你。新年快乐Sql 如何根据fetch cteTable更新特定字段,sql,sql-server,Sql,Sql Server,我想根据cteTable的结果替换DATEADD函数中的第一个和第二个参数。这可能吗?我需要创建一个参数吗?先谢谢你。新年快乐 ;with cteDP as( SELECT CODE, MEASSUREMENT, DEFEXPIRYDATEDAYS, CASE WHEN MEASSUREMENT = 0 THEN 'DAY' WHEN MEASSUREMENT = 1 THEN 'WEEK' WHEN MEASSUREMENT = 2 THEN 'MONTH' WHEN
;with cteDP as(
SELECT CODE, MEASSUREMENT, DEFEXPIRYDATEDAYS,
CASE WHEN MEASSUREMENT = 0 THEN 'DAY'
WHEN MEASSUREMENT = 1 THEN 'WEEK'
WHEN MEASSUREMENT = 2 THEN 'MONTH'
WHEN MEASSUREMENT = 3 THEN 'YEARS'
ELSE 'SECOND'
END AS MEASUREMENTINWORD
FROM PW001C06 C06 WHERE CODE IN ('ADC','MMC')
)
select * from cteDP
UPDATE P05
SET P05.EXPIRYDATE = CASE
WHEN P05.CODE = 'ADC' THEN DATEADD('cteDocProperties.MEASUREMENTINWORD', @2nd parameter, EXPIRYDATE)
-- WHEN P05.CODE = 'MMC' THEN DATEADD(YEAR, 4, EXPIRYDATE)
-- WHEN P05.CODE = 'LD00' THEN DATEADD(YEAR, 3, EXPIRYDATE)
ELSE EXPIRYDATE
END
FROM PW001P05 P05
INNER JOIN cteDP
ON cteDP.CODE = P05.CODE
WHERE P05.PIN = 1
AND P05.CODE IN ('ADC','MMC')
您可以直接将联接到表表达式:
UPDATE P05
SET
P05.EXPIRYDATE = CASE
WHEN P05.CODE = 'ADC' THEN
CASE WHEN MEASUREMENTINWORD = 'SECOND'
THEN DATEADD(SECOND, MEASSUREMENT, EXPIRYDATE)
CASE WHEN MEASUREMENTINWORD = 'DAY'
THEN DATEADD(DAY, MEASSUREMENT, EXPIRYDATE)
CASE WHEN MEASUREMENTINWORD = 'MONTH'
THEN DATEADD(MONTH, MEASSUREMENT, EXPIRYDATE)
CASE WHEN MEASUREMENTINWORD = 'YEAR'
THEN DATEADD(YEAR, MEASSUREMENT, EXPIRYDATE)
ELSE EXPIRYDATE
END
FROM PW001P05 P05
INNER JOIN
(
SELECT
CODE
, MEASSUREMENT
, DEFEXPIRYDATEDAYS
, CASE
WHEN MEASSUREMENT = 0 THEN 'DAY'
WHEN MEASSUREMENT = 1 THEN 'WEEK'
WHEN MEASSUREMENT = 2 THEN 'MONTH'
WHEN MEASSUREMENT = 3 THEN 'YEARS'
ELSE 'SECOND'
END AS MEASUREMENTINWORD
FROM PW001C06 C06 WHERE CODE IN ('ADC','MMC')
) cteDP
ON cteDP.CODE = P05.CODE
WHERE P05.PIN = 1
AND P05.CODE IN ('ADC','MMC')
我也这么想。嵌套的case语句将完成这项工作。我有20多个代码需要更新。DEFEXPIRYDATEDAYS字段还用于显示年/日/月的数量。所以有3个条件,1个表示代码,1个表示日/月/年,1个表示数量。有没有办法让它正常化?谢谢。@Arvinjohnsalandan其他代码背后的逻辑是什么?它与
code='ADC'
的代码相比有什么不同吗?它与其他代码相同。只要大声想一想,这是可以正常化还是可以循环,这样脚本就可以短得多。@arvinjohnsalandan您最好的选择是像上面这样的查询。WHILE
循环可能较短,但性能较差。