子查询或联盟用于添加更严格的条件?

时间:2014-11-26 16:08:19

标签: sql-server ssms ssms-2012

我有一些行要出现,我想要排除

我的代码:

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。

  1. 我想添加额外的东西,只有当(OFG不喜欢' [cd]%'或OFG为空)时,我还要确保一行:如果OFG是C或D,请排除所有行,即使它有S.

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

  3. 另一个例子,如果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
    

1 个答案:

答案 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