【发布时间】:2018-12-12 08:30:45
【问题描述】:
我正在尝试确定是否在保存工单后应用了模板。 代码确实运行了,但它没有从 ACTION 列中捕获字符串“已应用模板”。
这是我获取数据的表格:
这是我得到的结果:
我的代码:
SELECT *
FROM
(SELECT
[ACTION],
CASE
WHEN ACTION = 'Save' AND LAG(ACTION) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) LIKE 'Template Applied%' AND LAG(SYS_CREATED_BY) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) = SYS_CREATED_BY
THEN 1
ELSE 0
END AS RELEVANT_SAVE,
[TICKET_NUMBER],
[USER_ID],
[SYS_CREATED_BY], [SYS_CREATED_ON],
DATEPART(YEAR, [SYS_CREATED_ON]) AS YEAR,
DATEPART(MONTH, [SYS_CREATED_ON]) AS month
FROM
TICKETSDB
WHERE
(ACTION = 'Save' OR ACTION LIKE 'Template Applied%')) AS T
【问题讨论】:
-
那么预期的结果是什么?您的结果显示两列,但您返回 8。什么给出了?
-
哦,屏幕截图上没有显示所有其他列。当它在 ACTION 列中“应用模板”时,我想要的结果在 RELEVANT_SAVE 列下有“1”。
-
您确定要按顺序创建吗?似乎不对。如果您尝试按人分组,请添加由 a 分区语句创建的。你能详细说明一下吗
-
我想要捕捉的是,如果“那个人”在票证中使用了模板,那么最终在我的 Excel 报告中计算该人对他的所有票证使用模板的次数。所以在 SQL 中我还没有尝试对它进行分组。
标签: sql sql-server window-functions