我有一些行要出现,我想要排除
我的代码:
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
这些表格的含义是,有关于联合国是投诉用户和路线的文件记录的投诉。 OFG是投诉人。 UN是用户路由Filenums。
我想添加额外的东西,只有当(OFG不喜欢' [cd]%'或OFG为空)时,我还要确保一行:如果OFG是C或D,请排除所有行,即使它有S.
我想扫描这些行并查看UN。如果UN具有24和UN的filenum的计数也是26等于2或更多,则仅显示un的文件行是26.结果是,我有一个用户是主管总是访问投诉而且同一用户(UN)也只处理投诉。我想表明,如果该主管用户与其他用户访问该案例,请不要包括他的行,因为他可能只是在阅读投诉。还有3个其他用户我想比较这个spervisor用户。
另一个例子,如果sueprvisor用户的filenum计数为1,请在我的结果中包含该行。如果filenum的计数(其中un(25,24),2个用户一个是主管)大于2,那么只包含un的行为25.用(26,24)中的un重复此操作并取消(32,24)。
结果2:
FILENUM OFG UN
S2 S 26
S3 S 26
S5 S 32
S6 S 24
S7 S 25
答案 0 :(得分: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