0

1-n 관련 조인이 관련된 클라이언트에 대한 BI 보고서를 작성 중입니다. 조인 된 테이블에 직원 ID (EmplId) 필드가 있습니다.조인 된 테이블의 모든 게시물의 열에 같은 값이 있는지 확인하려면 어떻게합니까?

나는이 보고서에 구축 한 쿼리는 해당 분야 "OneEmployee"의 1을 제공하도록되어이 다른 직원, 즉의 경우 모든 관련 게시물이는 null EmplId 필드에 같은 직원이있는 경우 :

TaskTrans 
    TaskTransHours > EmplId: 'John' 
    TaskTransHours > EmplId: 'John' 

이이

아이디어는 필드 갔지를 만드는 것입니다 빈 상기 필드를 떠나야한다

TaskTrans 
    TaskTransHours > EmplId: 'John' 
    TaskTransHours > EmplId: 'George' 

쿼리에서 상기 필드에 1을 주어야한다 case 함수가이를 확인하고 올바른 값을 반환합니다. 하지만 내 문제는 SQL을 통해이를 확인하는 방법이있는 반면입니다.

+0

사용하고있는 데이터베이스 제품 및 버전? 예 : Oracle, SQL Server 2008 R2 등 –

+0

MSSQL 2008 R2를 사용하고 있습니다. 비록 쿼리가 Visual Studio 내부에 작성되었지만. 나는 그것을 내 질문에 추가 할 것이다. – Hofftari

+0

@Flaskis, 지금까지 작성한 쿼리를 포함 할 수 있습니까? –

답변

0
select not count(*) from your_table 
where employee_id = GIVEN_ID 
    and your_field not in (select min(your_field) 
          from your_table 
          where employee_id = GIVEN_ID); 

참고 : 내 첫 번째 아이디어는 내부 쿼리에 LIMIT 1을 사용했지만, 그것이 분 그래서 MySQL은, 그것을 좋아하지 않았다 - 포인트가 하나를 사용하는 것이 아니라 단 하나. Min이 작동해야하지만 필드를 인덱싱해야합니다. 그러면 인덱스 만 사용되므로 분명히이 쿼리가 빠르게 실행됩니다 (분명히 employee_id도 인덱싱해야 함).

주 2 : 다른 아무도 없을 때 내가 다른 사람을 계산, 당신은 일을 원 count(*) 앞에 not 너무 혼란스러워하고 당신에게 카운트가 0이면 하나가 될 것입니다 not count(*)을 포기하지 마십시오 그렇지 않으면 0

0

이 보인다 windowCOUNT()에 대한 작업 :

SELECT 
    …, 
    CASE COUNT(DISTINCT TaskTransHours.EmplId) OVER() WHEN 1 THEN 1 END 
    AS OneEmployee 
FROM … 
관련 문제