我有以下表结构也提到我的预期输出请帮我查询,因为我对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:
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 :(得分: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
答案 1 :(得分:2)
您正在寻找employee
和document
表的笛卡尔积(交叉连接)。然后你需要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
答案 2 :(得分: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