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

论坛出有关问题了,小弟我重新贴一遍,求sql语句查错,请版主见谅

2013-08-01 
论坛出问题了,我重新贴一遍,求sql语句查错,请版主见谅。CREATE TABLE [dbo].[系统数据_员工信息]([员工代码

论坛出问题了,我重新贴一遍,求sql语句查错,请版主见谅。


CREATE TABLE [dbo].[系统数据_员工信息](
[员工代码] [int] IDENTITY(1,1) NOT NULL,
[姓名] [nchar](4) NULL,
[机构代码] [int] NULL,

 CREATE TABLE [dbo].[系统数据_机构信息](
[机构代码] [int] IDENTITY(1,1) NOT NULL,
[机构名称] [varchar](20) NULL,

CREATE TABLE [dbo].[工作管理_工作列表](
[工作序号] [int] IDENTITY(1,1) NOT NULL,
[发布人] [nvarchar](4) NULL,
[发布日期] [datetime] NULL,
[状态] [nvarchar](3) NULL,

CREATE TABLE [dbo].[工作管理_工作分工](
[序号] [int] IDENTITY(1,1) NOT NULL,
[工作序号] [int] NULL,
[员工代码] [int] NULL,
[性质] [nvarchar](2) NULL,

以上是表结构
想得到以下结果:
姓名 主管 分管 主办 协办
王x   1   1    2    4
李x   2   3    1    1
张x   0   0    0    0

在各位大爷的帮助下,对sql语句进行优化,结果如下:
  use gysys
  select a.姓名,
  COUNT(case when b.性质='主管' then a.姓名 else '其他' end) as 主管,
  COUNT(case when b.性质='分管' then a.姓名 else '其他' end) as 分管,
  COUNT(case when b.性质='主办' then a.姓名 else '其他' end) as 主办,
  COUNT(case when b.性质='协办' then a.姓名 else '其他' end) as 协办
  from 系统数据_员工信息 as a
  join 工作管理_工作分工 as b on a.员工代码=b.员工代码 
  join 工作管理_工作列表 as c on b.工作序号=c.工作序号 
  group by a.姓名

出现的结果是,重复了,显然不对。
姓名   主管      分管      主办     协办
李x7       7        77
王x14141414
张x4444

各位大爷,我错在哪了。



[解决办法]
try this,

  use gysys


  
  select a.姓名,
  sum(case when b.性质='主管' then 1 else 0 end) as 主管,
  sum(case when b.性质='分管' then 1 else 0 end) as 分管,
  sum(case when b.性质='主办' then 1 else 0 end) as 主办,
  sum(case when b.性质='协办' then 1 else 0 end) as 协办
  from 系统数据_员工信息 as a
  join 工作管理_工作分工 as b on a.员工代码=b.员工代码 
  join 工作管理_工作列表 as c on b.工作序号=c.工作序号 
  group by a.姓名

热点排行