2014-11-26 2 views
0

나는 제외 할 것을오고 일부 행이더 엄격한 조건을 추가하기위한 부속 질의 또는 공용체?

내 코드 : 수단이 이러한 테이블은 filenum 기록의 불만이 있다는 것을 무엇

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은 Filenum을 라우팅하는 사용자입니다.

  1. 나는 추가되며, 경우에만 추가하고 싶었 (OFG가 싫어 '[CD] %를'또는 OFG는 NULL IS) 나는 또한 있는지 확인하려면 해당 행을위한, 무엇 : OFG가 C 인 경우 또는 D가있는 경우에도 모든 행을 제외하십시오.

  2. 이 행을 스캔하여 UN을 살펴 보겠습니다. UN이 가지고있는 filenum의 개수가 24이고 UN도 26이 2 이상인 경우 un가 26 인 filenum 행만 표시하십시오. 결과적으로 관리자에게 항상 액세스하는 사용자가 있고 또한 혼자서 만 처리하는 동일한 사용자 (UN). 나는 그 감독자 사용자가 다른 사용자와 함께 사건에 접근 할 경우 그 사람이 불만 사항을 읽었을 수 있기 때문에 그 사람의 행을 포함시키지 않는 것을 보여주고 싶습니다. 이 상담원 사용자를 비교하려는 사용자가 3 명 있습니다.

sueprvisor 사용자의 filenum 수가 1 인 경우 내 결과에 행을 포함 시키십시오. (25, 24)에서 un 인 superenvisor 인 사용자 2 명이 2보다 큰 filenum의 수인 경우 un가 25 인 행만 포함합니다. un (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 
+0

당신은 더 많은 설명을 추가해야합니다. 유엔은 동시에 24와 26을 동시에 나눌 수 없다. 우리가 문제를 이해할 수 있도록 도와 주며 해결책을 도울 수 있습니다. –

+0

@SeanLange 유엔에 대한 자세한 내용을 알려 드린 나의 시도를 읽으십시오. –

+0

WHERE 절에 AND NOT EXISTS()를 추가하여이 문제를 해결해보십시오. –

답변

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 
+0

불행히도, 나는 단지 읽기 전용 액세스 권한이있는 데이터베이스에서 이러한 예제보다 더 많은 것을 얻을 것입니다. –