Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 每次成员再次出现时标记为循环_Sql Server_Tsql - Fatal编程技术网

Sql server 每次成员再次出现时标记为循环

Sql server 每次成员再次出现时标记为循环,sql-server,tsql,Sql Server,Tsql,我想标记循环,即每次成员再次出现时。 这个列表显示了我想要的结果 Sequence ID Aktivity ID From, Agent ID To, Agent ID Movement Circulated 1 001A9552444 YNGBAN TOMYAN 1 0 2 001A9552461 TOMYAN THOKIN 1

我想标记循环,即每次成员再次出现时。 这个列表显示了我想要的结果

Sequence ID Aktivity ID From, Agent ID  To, Agent ID    Movement    Circulated
1           001A9552444 YNGBAN          TOMYAN          1           0
2           001A9552461 TOMYAN          THOKIN          1           0
3           001A9552466 THOKIN          MATLOV          1           0
4           001A9552486 MATLOV          THOKIN          1           1
5           001A9552499 THOKIN          YNGBAN          1           1
6           001A9554213 YNGBAN          IKJER           1           0
创建基表的代码

DROP TABLE IF EXISTS [dbo].[Basetable]
CREATE TABLE [dbo].[Basetable] (
[Incident ID] INT,
[Activity ID] VARCHAR(50),
[Agent ID] VARCHAR(50),
)
INSERT INTO [dbo].[Basetable]
VALUES
(1072326, '001A9552444', 'YNGBAN'),
(1072326, '001A9552461', 'TOMYAN'),
(1072326, '001A9552463', 'THOKIN'),
(1072326, '001A9552464', 'THOKIN'),
(1072326, '001A9552465', 'THOKIN'),
(1072326, '001A9552466', 'THOKIN'),
(1072326, '001A9552468', 'MATLOV'),
(1072326, '001A9552484', 'MATLOV'),
(1072326, '001A9552485', 'MATLOV'),
(1072326, '001A9552486', 'MATLOV'),
(1072326, '001A9552499', 'THOKIN'),
(1072326, '001A9554212', 'YNGBAN'),
(1072326, '001A9554213', 'YNGBAN'),
(1072326, '001A9568252', 'IKJER')
下面是到目前为止的代码。我不想做分组和计数,并尝试了左连接和外部应用,但还没有找到一个好的解决方案

WITH X AS (
SELECT
   ROW_NUMBER() OVER (ORDER BY [Activity ID]) AS [Sequence ID]
   ,[Incident ID]
   ,[Activity ID]
   ,[From, Agent ID]
   ,[To, Agent ID] 
   ,1 AS [Movement]
FROM (
   SELECT
         [Incident ID]
         ,[Activity ID]
         ,[Agent ID] AS [From, Agent ID] 
         ,LEAD([Agent ID],1,0) OVER (PARTITION BY [Incident ID] ORDER BY [Activity ID]) AS [To, Agent ID] 
   FROM [dbo].[Basetable]
   ) AS X
WHERE
   [To, Agent ID] != '0' AND [From, Agent ID] != [To, Agent ID]
)
SELECT
   X1.[Sequence ID]
   ,X1.[Incident ID]
   ,X1.[Activity ID]
   ,X1.[From, Agent ID]
   ,X1.[To, Agent ID] 
   ,X1.[Movement]
FROM X AS X1

编辑:添加了创建基表的代码并清除了主代码。

这些列中哪一列是成员?如果您可以包括示例数据和所需结果,这将非常有用。两个代理字段包含成员。我现在添加了创建示例数据的代码。所需结果在最开始处显示。循环的逻辑是什么?循环的逻辑:在有序顺序中,如果[To,Agent ID]先前显示为[From,Agent DI],则循环=1
-- Your existing query
;WITH X AS (
SELECT
   ROW_NUMBER() OVER (ORDER BY [Activity ID]) AS [Sequence ID]
   ,[Incident ID]
   ,[Activity ID]
   ,[From, Agent ID]
   ,[To, Agent ID] 
   ,1 AS [Movement]
FROM (
   SELECT
         [Incident ID]
         ,[Activity ID]
         ,[Agent ID] AS [From, Agent ID] 
         ,LEAD([Agent ID],1,0) OVER (PARTITION BY [Incident ID] ORDER BY [Activity ID]) AS [To, Agent ID] 
   FROM [dbo].[Basetable]
   ) AS X
WHERE
   [To, Agent ID] != '0' AND [From, Agent ID] != [To, Agent ID]
),
Y AS
(
SELECT
   X1.[Sequence ID]
   ,X1.[Incident ID]
   ,X1.[Activity ID]
   ,X1.[From, Agent ID]
   ,X1.[To, Agent ID] 
   ,X1.[Movement]
FROM X AS X1
)
-- Added this part
SELECT  Y.*, CASE WHEN Z.CNT > 0 THEN 1 ELSE 0 END AS Circulated
FROM    Y
    CROSS APPLY
    (
        -- Count the occurrence of the To Agent ID appear before as `From`
        SELECT  CNT = COUNT(*)
        FROM    X
        WHERE   X.[Sequence ID]     < Y.[Sequence ID]
        AND     X.[From, Agent ID]  = Y.[To, Agent ID]
    ) Z