0

我有一些要排除的行

我的代码:

SELECT DISTINCT T1.FILENUM, T5.OFG, T4.UN
FROM
T1
LEFT OUTER JOIN 
   T2 ON T1.ID=T2ID
LEFT OUTER JOIN 
   T3 ON T1.ID = T3.ID
LEFT OUTER JOIN 
   T4 ON T3.ID=T4ID
LEFT OUTER JOIN 
   T5 ON T2.ID = T5.ID
WHERE DATECondition
AND T1.FILENUM LIKE 'S%'
AND (T4.UN = 26 OR T4.UN = 25 OR T4.UN = 24 OR T4.UN = 32)

结果

FILENUM    OFG     UN
S1          S      26
S1          C      25
S1          D      26
S2          S      26
S2          S      24
S3          S      26
S4          S      26
S4          C      25
S5          S      32
S6          S      24
S7          S      25
S7          S      24

这些表的意思是有联合国是用户的filenum记录的投诉和投诉的路由。OFG是投诉人。UN 是路由 Filenums 的用户。

  1. 我想补充的是,只有当(OFG 不像 '[cd]%' 或 OFG 为 NULL)时,我还想确保对于一行:如果 OFG 是 C 或 D,请排除所有行甚至如果它有 S。

  2. 我想扫描这些行并查看联合国。如果 UN 有 24 且 UN 也是 26 的 filenum 的计数等于或大于 2,则仅显示 un 为 26 的 filenum 行。结果是,我有一个主管用户始终在访问投诉,并且同一用户 (UN) 也仅单独处理投诉。我想表明,如果该主管用户与其他用户一起访问该案例,请不要包括他的行,因为他可能只是在阅读投诉。还有 3 个其他用户我想比较这个管理员用户。

另一个例子,如果 sueprvisor 用户的 filenum 计数为 1,则在我的结果中包含该行。如果 un in (25, 24) 中的 filenum 的计数大于 2,则仅包括 un 为 25 的行。使用 un in (26, 24) 和 un in 重复此操作(32, 24)。

结果 2:

FILENUM    OFG     UN
S2          S      26    
S3          S      26
S5          S      32
S6          S      24
S7          S      25
4

1 回答 1

0

尝试这个。

CREATE TABLE #test1
  (FILENUM VARCHAR(50),OFG CHAR(1),UN INT)

INSERT #test1
VALUES ('S1','S',26),('S1','C',25),('S1','D',26),
       ('S2','S',26),('S2','S',24),('S3','S',26),
       ('S4','S',26),('S4','C',25),('S5','S',32),
       ('S6','S',24),('S7','S',25),('S7','S',24) 


WITH cte
     AS (SELECT Row_number()OVER(partition BY filenum ORDER BY un DESC) rn,
                *
         FROM   #test1
         WHERE  FILENUM NOT IN(SELECT FILENUM
                               FROM   #test1
                               WHERE  OFG IN ( 'C', 'D' )))
SELECT FILENUM,OFG,UN
FROM   cte
WHERE  rn = 1 

输出 :

FILENUM OFG UN
------- --- --
S2      S   26
S3      S   26
S5      S   32
S6      S   24
S7      S   25
于 2014-11-26T16:37:05.770 回答