作者:mobiledu2502877697 | 来源:互联网 | 2023-05-18 04:23
CREATETABLE[dbo].[系统数据_员工信息]([员工代码][int]IDENTITY(1,1)NOTNULL,[姓名][nchar](4)NULL,[机构代码][
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.姓名
出现的结果是,重复了,显然不对。
姓名 主管 分管 主办 协办
李x 7 7 7 7
王x 14 14 14 14
张x 4 4 4 4
各位大爷,我错在哪了。
7 个解决方案
再说一下,join和inner join 的区别是什么?
没错,两者等价,
其他的JOIN类型的区别可以参考一下下面的。
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins