我们正在使用下面的视图通过ROW_NUMBER()
函数生成标识列的值,但是如何更改此视图以在标识列中返回增量数字,例如,如果今天运行视图,它将返回100条记录, identity列的值是1到100,如果我明天运行它,它应该返回101到当天的记录。非常感谢您的帮助。
CREATE VIEW [dbo].[Data_Old]
AS
SELECT
ROW_NUMBER() OVER (ORDER BY event_time) AS id,
event_time, loc, c, d, e, f, Expr1
FROM
(SELECT
FORMAT(h.ACTIVITYDT, 'yyyy MMM dd hh:mm:ss') AS event_time,
ISNULL(h.LOCATION, N'17.51.12.24') loc,
' LEEF:1.0|Manage|WorkSite|9.5|' + CAST(NEWID() AS varchar(50)) c,
'|devTime=' + FORMAT(h.ACTIVITYDT, 'MMM dd hh:mm:ss') d,
'|usrName=' + ISNULL(h.USER, N'{null}') + '|fullName=' + ISNULL(u.FULLNAME, N'{null}') e,
'|activity=' + ISNULL(h.ACTIVITYDT, N'{null}') + '|library=COLLECTIONS' + '|Num=' + CAST(h.NUM AS varchar) + '|version=' + CAST(h.VERSION AS varchar) f,
'|pagesPrinted=' + CAST(h.PAGES_PRINTED AS varchar) + '|FTI=' + ISNULL(CAST(d.CBOOL2 AS varchar), N'False')
+ '|keyData=case:' + ISNULL(d.C5ALIAS, N'{null}') + ';serialNo:' + ISNULL(d.C16ALIAS, N'{null}')
+ ';documentNo:' + ISNULL(CAST(d.CDBL1 AS varchar), N'') AS Expr1
FROM
dbo.HISTORY AS h
LEFT OUTER JOIN
dbo.MASTERS AS d WITH (nolock) ON d.NUM = h.NUM AND d.VERSION = h.VERSION
LEFT OUTER JOIN
dbo.USERS AS u WITH (nolock) ON h.USER = u.USERID
WHERE
(h.ACTIVITYDT >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
AND h.ACTIVITYDT < DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0))
AND (h.ACTIVITYDT >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
AND h.ACTIVITYDT < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0))
AND (h.ACTIVITYDT >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
AND h.ACTIVITYDT < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, 0))
UNION ALL
SELECT
FORMAT(ACTIONDT, 'yyyy MMM dd hh:mm:ss') AS event_time,
' 127.55.82.124' b,
' LEEF:1.0|Manage|WorkSite|9.5|' + CONVERT(VARCHAR, SID) + CONVERT(VARCHAR, DATEDIFF(SECOND, ACTIONDT, '2017-01-01')) c,
'|devTime=' + FORMAT(ACTIONDT, 'MMM dd hh:mm:ss') d,
'|usrName=' + ISNULL(USERID, '{null}') e,
'|activity=' + CASE ACTIONSID
WHEN 1 THEN 'Successful Login'
WHEN 2 THEN 'Unsuccessful Login'
WHEN 3 THEN 'Impersonated Login'
WHEN 4 THEN 'Impersonated Logoff'
END f,
'|library=COLLECTIONS' AS LEEF
FROM
dbo.HISTORY
WHERE
(ACTIONDT >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
AND ACTIONDT < DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0))
AND (ACTIONDT >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
AND ACTIONDT < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0))
AND (ACTIONDT >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
AND ACTIONDT < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, 0))
) AS MyResult
答案 0 :(得分:1)
在没有WHERE子句的CTE中在整个表上生成ROW_NUMBER()。
然后仅查看今天的数据,请从CTE中选择并使用WHERE子句。
您当前的代码首先(在派生表中)应用WHERE子句,然后对那些过滤后的结果使用ROW_NUMBER(),因此行号将始终从1开始。