sql - 将 CTE 转换为触发器
问题描述
我已将此 CTE 数据更新到一个表中,并且我希望该表每月自动更新,以便该表将使用月份数据进行更新。同样,在屏幕截图中,它显示了上个月(10 月)的数据。
每个月后自动换表和更新数据。如果我们要实现触发器,那么在 CTE 中应用的最佳触发器是什么,代码如何与触发器一起工作。任何人都可以帮助我用 CTE 编写触发器。
WITH CTE_ABC AS
(
SELECT
SUM(CASE
WHEN M.ActiveStart < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
AND M.ActiveEnd > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
THEN 1 ELSE 0
END) AS No_of_Live_Member,
SUM(CASE
WHEN M.ActiveEnd BETWEEN DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 1, 0)
AND DATEADD(month, DATEDIFF(MONTH, 0,Getdate()), -1)
THEN 1 ELSE 0
END) AS No_of_Member_Cancelled,
M.HomeBranch,
M.LocationName
FROM
AX.Mem M
GROUP BY
M.HomeBranch, M.LocationName
)
SELECT
DATEPART(m, DATEADD(m, -1, GETDATE())) AS Month,
DATEPART(yyyy, DATEADD(m, -1, GETDATE())) AS Year,
CAST(No_of_Member_Cancelled AS DECIMAL(10, 0)) / CAST(NULLIF(No_of_Live_Member, 0) AS DECIMAL(10,0)) AS Current_Attrition_Rate,
HomeBranch,
LocationName
FROM
CTE_ABC
WHERE
No_of_Member_Cancelled / NULLIF(No_of_Live_Member, 0) IS NOT NULL
解决方案
这个问题有点不清楚,但如果问题是如何基于 CTE 执行更新,则语法如下:
;with cte as (
... your query ...
)
update trends set ... whatever you need to update ...
from trends
join cte
on ... however you need to join between your cte and trends table
此查询可以打包为存储过程,或直接输入 SQL 代理并每月运行,或根据需要运行。
另请记住,如果有帮助,您可以拥有多个 CTE,如下所示。在您的情况下,您在 CTE 之后的查询可能是第二个 CTE,然后在更新中使用。
;with cte1 as (
... you first query
)
,cte2 as (
select blah from cte1
)
update trends set ...
from trends
join cte2 (etc)
推荐阅读
- android - 有没有办法创建 PWA(渐进式 Web 应用程序)的 Android 桌面小部件?
- string - 如何在进行中执行基本的字符串处理
- ubuntu - 将 Eclipse Che 暴露给外部客户端
- java - 如何将整数列表作为 json 数据传递给 Spring Boot Rest API?
- emacs - ./emacs.d/init.ls 文件中的自定义 4 空格缩进使用 8 个空格执行
- javascript - 赛普拉斯中的路径变量
- visual-studio-code - DocumentRoot 和 VSCode 连接
- swift - 如何将子视图添加到我的 stackView?我试试看,但我看不到它们
- dask - 在 dask 集群上运行自身的多线程函数
- python - 创建类似于 scipy 的 OptimizedResult 的数据类型