SQL查询选择每个员工的每种表单类型
我使用的是MSSQL server 2008,有两个表SQL查询选择每个员工的每种表单类型,sql,sql-server,database,Sql,Sql Server,Database,我使用的是MSSQL server 2008,有两个表表单和员工 表单包含员工填写的所有表单,例如 [id][employeeId][formId] 只有6种类型的表单,每种表单都有自己的id。我如何构造一个查询来列出每种类型表单的每位员工,以及这些表单是否已完成(存在于表单表中),例如 编辑:我的当前查询,列出所有需要“过滤”到上面架构的信息: SELECT * FROM forms as f inner join employees as e on e.EmployeeID = f.Em
表单
和员工
表单
包含员工填写的所有表单,例如
[id][employeeId][formId]
只有6种类型的表单,每种表单都有自己的id。我如何构造一个查询来列出每种类型表单的每位员工,以及这些表单是否已完成(存在于表单表中),例如
编辑:我的当前查询,列出所有需要“过滤”到上面架构的信息:
SELECT *
FROM forms as f
inner join employees as e on e.EmployeeID = f.EmployeeID
也许这能奏效
SELECT emp.[employeeName], form1.formId as formType1, form2.formId as formType2, form3.formId as formType3, form4.formId as formType4, form5.formId as formType5, form6.formId as formType6
FROM [database_name].dbo.[employees] as emp
RIGHT OUTER JOIN [database_name].dbo.[form] as form1 ON (emp.[EmployeeID] = form1.[EmployeeID] AND form1.id='ID_FOR_THE_FORM1')
RIGHT OUTER JOIN [database_name].dbo.[form] as form2 ON (emp.[EmployeeID] = form2.[EmployeeID] AND form2.id='ID_FOR_THE_FORM2')
RIGHT OUTER JOIN [database_name].dbo.[form] as form3 ON (emp.[EmployeeID] = form3.[EmployeeID] AND form3.id='ID_FOR_THE_FORM3')
RIGHT OUTER JOIN [database_name].dbo.[form] as form4 ON (emp.[EmployeeID] = form4.[EmployeeID] AND form4.id='ID_FOR_THE_FORM4')
RIGHT OUTER JOIN [database_name].dbo.[form] as form5 ON (emp.[EmployeeID] = form5.[EmployeeID] AND form5.id='ID_FOR_THE_FORM5')
RIGHT OUTER JOIN [database_name].dbo.[form] as form6 ON (emp.[EmployeeID] = form6.[EmployeeID] AND form6.id='ID_FOR_THE_FORM6') ;
不完全是你在寻找什么,你可以求值如果为空,那么员工不回答其他形式的问题,他回答它。我希望这有助于您可以根据员工ID进行分组,并“计算”每种表单类型的实例数:
SELECT employeeid,
SUM(CASE WHEN f.ID = 1 THEN 1 ELSE 0 END) formType1,
SUM(CASE WHEN f.ID = 2 THEN 1 ELSE 0 END) formType2,
SUM(CASE WHEN f.ID = 3 THEN 1 ELSE 0 END) formType3,
SUM(CASE WHEN f.ID = 4 THEN 1 ELSE 0 END) formType4,
SUM(CASE WHEN f.ID = 5 THEN 1 ELSE 0 END) formType5,
SUM(CASE WHEN f.ID = 6 THEN 1 ELSE 0 END) formType6
FROM forms as f
GROUP BY employeeid
如果您也希望看到未填写任何表格的员工,您可以尝试以下方法:
Select FormName, EmpName, id
FROM
(SELECT formID ,FormName , empID, EmpName
FROM FormTypes
CROSS JOIN Emp) x
LEFT JOIN Forms f on (x.empid = f.employeename and x.formID = f.formID)
你可以发布你现在使用的选择吗?如果我could@Lee听了你的评论,D Stanley,我想这比我的答案更有效,因为我的答案是,你在同一个表实例上执行所有操作。。。很高兴看到同样的新方法,太好了!
Select FormName, EmpName, id
FROM
(SELECT formID ,FormName , empID, EmpName
FROM FormTypes
CROSS JOIN Emp) x
LEFT JOIN Forms f on (x.empid = f.employeename and x.formID = f.formID)