我在我的网站中使用带有php的sql server 2008 r2。我有2张桌子。
1是给员工的。
(int) (nvarchar) (nvarchar) id name type 1 john 2 2 peter 1 3 leah 2 4 frank 1 5 tang 3
2是上班
(int) (nvarchar) (nvarchar) workid name employees 1 task1 1,3 2 task2 2,3 3 task3 1,3,4 4 task4 2
我想进行查询,以便给我提供类型为<3的员工姓名的工作描述。
就是说我想得到这样的结果。
workid name employee 1 task1 john, leah 2 task2 peter, leah 3 task3 john,leah,frank
同样地
那么我如何使用sql查询实现此结果呢?
我无法更改表架构。
我试图与case语句一起使用,但无法正常工作。
请帮我使这个工作..
它的内容并不能完全回答问题,但是会建议您如何正确规范化表以简化问题。
这是一种Many-to-Many关系。
Many-to-Many
Employees - ID (Primary Key) - Name - Type Task - ID (Primary Key) - Name Work - EmployeeID (Foreign Key) - TaskID (Foreign Key)
员工表
id name type 1 john 2 2 peter 1 3 leah 2 4 frank 1 5 tang 3
任务表
id name 1 task1 2 task2 3 task3 4 task4
工作表
TaskID EmployeeID 1 1 1 3 2 2 2 4 3 1 3 2 3 3 4 4
询问,
SELECT t.ID, t.Name, STUFF( (SELECT ',' + b.Name FROM Work a INNER JOIN Employee b ON a.EmployeeID = b.ID WHERE a.TaskID = t.ID FOR XML PATH ('')) , 1, 1, '') AS NamesList FROM Task t -- WHERE ..... -- add additional conditions... GROUP BY t.ID, t.Name