首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求sql 话语

2013-08-01 
求sql 语句。表a员工代码 姓名1王x表b任务编号 员工代码性质11主管21分管31主办41协办51协办想得到以下结果

求sql 语句。
表a
员工代码 姓名
   1     王x

表b
任务编号 员工代码  性质
    1       1     主管
    2       1     分管
    3       1     主办
    4       1     协办
    5       1     协办

想得到以下结果如何实现?
   员工代码 姓名 主管 分管 主办 协办
       1    王x   1   1   1    2




[解决办法]

--> 生成测试数据表: [a]
IF OBJECT_ID('[a]') IS NOT NULL
DROP TABLE [a]
GO
CREATE TABLE [a] ([员工代码] [int],[姓名] [nvarchar](10))
INSERT INTO [a]
SELECT '1','王x' UNION ALL
SELECT '2','李x'

--> 生成测试数据表: [b]
IF OBJECT_ID('[b]') IS NOT NULL
DROP TABLE [b]
GO
CREATE TABLE [b] ([任务编号] [int],[员工代码] [int],[性质] [nvarchar](10))
INSERT INTO [b]
SELECT '1','1','主管' UNION ALL
SELECT '2','1','分管' UNION ALL
SELECT '3','1','主办' UNION ALL
SELECT '4','1','协办' UNION ALL
SELECT '5','1','协办' UNION ALL
SELECT '2','2','分管' UNION ALL
SELECT '3','2','主办' UNION ALL
SELECT '4','2','协办' UNION ALL
SELECT '5','2','协办'


-->SQL查询如下:
SELECT a.*,b.主管,b.分管,b.主办,b.协办
FROM [a] a
JOIN (
SELECT * 
FROM (select 员工代码,性质 from b) b
PIVOT(COUNT(性质) FOR 性质 IN(主管,分管,主办,协办)) P
) b 
ON a.员工代码=b.员工代码
/*
员工代码        姓名         主管          分管          主办          协办


----------- ---------- ----------- ----------- ----------- -----------
1           王x         1           1           1           2
2           李x         0           1           1           2

(2 行受影响)
*/

热点排行