2014-12-01 2 views
0

에 조인 나는 내가 다음 SQL 쿼리가져 오기 요약 출력은 SQL

에 대해 잘 모르는 나의 예상 출력이 쿼리 좀 도와주세요 언급이 또한 다음과 같은 테이블 구조는 테이블 구조

있다가
select Id,DocumentName from dbo.JoinigDocument 

Id DocumentName 
1 Exp letter 
2 birth cert 
3 Leaving 

표 2

SELECT * FROM dbo.EmployeeJoiningDocument 

Id JoiningDocumentId EmployeeId 
1  1     1 
2  3     1 
3  1     2 
4  2     2 
5  3     2 
6  1     3 

표 3 :

0,123,516
select Id,FName from dbo.EmployeeDetail 

Id FName 
1 Pratik 
2 Nilesh 
3 Praveen 

예상 출력 : -

DocumentName FName  Present 

Exp letter  Pratik  1 
birth cert  Pratik  0 
Leaving   Pratik  1 
Exp letter  Nilesh  1 
birth cert  Nilesh  1 
Leaving   Nilesh  1 
Exp letter  Praveen  1 
birth cert  Praveen  0 
Leaving   Praveen  0 
+0

현재 란 무엇입니까? 문서가 존재하지 않습니까? – AK47

+0

Yes..present는 문서가 존재 함을 나타 내기위한 식별자입니다. – Nilesh

답변

2

당신은 직교 제품을 찾고있는 employeedocument 테이블 (조인 크로스). 그런 다음에 합류 테이블에 outer join해야합니다

select t.documentname, t.fname, count(ejd.id) present 
from (
    select d.documentname, d.id documentid, e.fname, e.id employeeid 
    from JoinigDocument d cross join EmployeeDetail e 
) t left join EmployeeJoiningDocument ejd on 
     t.documentid = ejd.joiningdocumentid and t.employeeid = ejd.employeeid 
group by t.documentname, t.fname 
+0

감사합니다 .it worked – Nilesh

2

이 시도 :

select JD.DocumentName,ED.FName, 
ISNULL(case when COUNT(*)>1 then 1 else 0 end ,0) as Present 
from JoinigDocument JD 
cross join EmployeeDetail ED 
LEFT join EmployeeJoiningDocument EJ 
on JD.Id=EJ.JoiningDocumentId 
group by JD.DocumentName,ED.FName 
+0

카운트 란 무엇을 의미합니까? 데이터베이스에 중복 레코드가 있기 때문입니다. – AK47

+0

@ AK47 업데이트 됨 –

1

사용이 쿼리 결과를 얻을 수 있습니다.

CREATE TABLE #JoinigDocument 
(
    ID INT, 
    DOCName VARCHAR(100) 
) 

    CREATE TABLE #EmployeeJoiningDocument 
(
    ID INT, 
    JoiningDocumentId INT, 
    EmployeeId INT 
) 


    CREATE TABLE #EmployeeDetail 
(
    ID INT, 
    FName VARCHAR(100) 
) 


    INSERT INTo #JoinigDocument 
    SELECT 1, 'Exp letter' UNION 
    SELECT 2, 'birth cert' UNION 
    SELECT 3, 'Leaving' 

INSERT INTO #EmployeeJoiningDocument 
SELECT 1 ,1 , 1 UNION 
SELECT 2 ,3 , 1 UNION 
SELECT 3 ,1 ,2 UNION 
SELECT 4 ,2 ,2 UNION 
SELECT 5 ,3 ,2 UNION 
SELECT 6 ,1 ,3 


INSErt INTo #EmployeeDetail 
SELECT 1, 'Pratik' UNION 
    SELECT 2, 'Nilesh' UNION 
    SELECT 3, 'Praveen' 

    SELECt A.DOCName, A.FName, 
     CASE WHEN D.ID IS NULL 
      THEN 0 ELSE 1 
     END AS Present FROM  
    (SELECT A.ID AS DocID, A.DOCName, B.ID AS EMPID, B.FName 
    FROm #JoinigDocument AS A, #EmployeeDetail AS B) AS A 
    LEFT JOIN #EmployeeJoiningDocument AS D 
    On A.DocID = D.JoiningDocumentId AND A.EMPID = D.EmployeeId 
    ORDER BY A.EMPID