热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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 个解决方案

#1


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.姓名

#2


引用 1 楼 ap0405140 的回复:
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.姓名

我靠,高人啊。解决我的问题了。
我原来用sum,他说字符地型的不行,原来还可以这样啊。
看来这个sql的基础知识实在是太差,谢谢了。

#3


#4


再说一下,join和inner join 的区别是什么?

#5


引用 4 楼 ruhong 的回复:
再说一下,join和inner join 的区别是什么?

join默认就是inner join,二者是等价的.

#6


没错,两者等价,
其他的JOIN类型的区别可以参考一下下面的。
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

#7


引用 5 楼 ap0405140 的回复:
Quote: 引用 4 楼 ruhong 的回复:

再说一下,join和inner join 的区别是什么?

join默认就是inner join,二者是等价的.

好。

推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
mobiledu2502877697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有