小编在做组织部维护最后收尾工作的时候,遇到了这样一个问题,须要将定性考核得分查出来、定量考核相应的数据查出来并进行得分计算、附加分查出来,最后将这三部分信息汇总之后得到总成绩,假设当中一项成绩没有进行计算那么是能够得到成绩的。

    展望师哥他们曾经的逻辑。通过两个视图将定性和定量得分计算保存之后。再用一个视图将三个得分连到一起并进行计算。

    被组长规定仅仅能用SQL语句来写,由于这样维护起来就非常方便了。

我開始先用了级联查询并计算,但是效果并不太理想。最后了解到连接查询,经过重复试验,最终有了下面成果:

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT
--总排名
ROW_NUMBER() OVER(ORDER BY ISNULL((h.AdditionalResults),0) + f.TotalScores ) AS 总排名 ,
--园区ID
f.ObjectID AS 市直单位id,
--园区名称
f.Responsibility AS 开发区园区名称,
--年份
f.YearTime AS 年份,
--定量总得分
f.QuantifyScores as 定量总得分,
--附加分
ISNULL((h.AdditionalResults),0) AS 奖惩总得分,
--最总定量+定性+附加总分
ISNULL((h.AdditionalResults),0) + f.TotalScores AS 总得分
from
--汇总,通过左链接链接之后,查询以下信息,并将定性和定量总得分汇总
(SELECT
--园区ID
c.ObjectID,
--园区名称
c.Responsibility,
--年份
e.YearTime,
--定量总得分
ISNULL((c.QuantifyScores),0) AS QuantifyScores,
--定性定量总得分
ISNULL((e.CalculateScores),0) + ISNULL((c.QuantifyScores),0) AS TotalScores
FROM
--第一层查询,查询到定性总得分当成基表
(SELECT
--园区ID
d.DevelopmentID,
--考核时间
d.YearTime,
--定性总得分
d.CalculateScores
FROM
T_DevelopmentScores d) e
--和第一层并列的查询,查询到定量信息并计算出定量总分
left JOIN
(SELECT
--园区ID
a.ObjectID,
--园区名称
a.Responsibility,
--计算并显示定量总得分
ISNULL(CAST(a.score AS real), 0)*ISNULL(CAST(b.Weight AS real), 0) / 100 AS QuantifyScores
FROM
T_DevelopmentQuantifyScores a,
T_DevelopmentQuantifyTarget b
WHERE a.TragetID = b.TragetID ) c ON e.DevelopmentID = c.ObjectID) f
--和定量定性得分汇总并列,通过左链接查询到以下附加分
LEFT JOIN
(SELECT
--园区ID
g.DevelopmentID,
--附加分
g.AdditionalResults
FROM
T_DevelopmentAdditionalResults g) h ON f.ObjectID = h.DevelopmentID</span>

尝到了SQL语句中连接的甜头,于是小编在网上搜索之后并自己实践,有了以下成果:

举例介绍

以下的内容介绍将会分别用以下两个表进行试验

外连接

左连接(left join或者left outer join):

说明:以左表为基础,查询右表中全部符合条件的信息,不存在的用Null补充

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a LEFT JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>


结果例如以下:

右连接(right join或者right outer join)

说明:以右表为基础,查询左表中全部符合条件的信息,不存在的用Null补充

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a right JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>


结果例如以下:

全然连接(full join或者full outer join)

说明:将两个表中的信息都查出来,没有相应的信息,用Null补充

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a full JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>


结果例如以下:

内连接(inner join)

说明:仅仅显示符合条件的信息,条件能够是(=、<、>、<>、<=、>=、!<、!>),以下仅仅介绍条件为=的内容

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a inner JOIN dbo.TestTable2 b ON a.Hobbyid = b.Hobbyid</span>


结果例如以下:

交叉连接(cross join)

无条件

说明:将查到两个表中的全部数据的乘积(假设每一个表中都有3行数据,最后显示3*3=9行数据)

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 cross JOIN dbo.TestTable2
--上面与以下的语句等价
SELECT * FROM dbo.Testtable1, dbo.TestTable2</span>


结果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

有条件

说明:将上面查到的无条件的结果依照条件进行筛选可是这里仅仅能用where表示不能用on表示

<span style="font-family:KaiTi_GB2312;font-size:18px;">--
SELECT * FROM dbo.Testtable1 a cross JOIN dbo.TestTable2 b WHERE a.Hobbyid = b.Hobbyid</span>


结果例如以下:

总结

小编将这句话送给自己以及全部的读者:

    在将来的路上,了解一块东西就将它的来龙去脉缕个通,并进行总结,这样以后的路将会更加通畅!

SQL Server外连接、内连接、交叉连接的更多相关文章

  1. 全面解析SQL SERVER 的左右内连接

    SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  2. 【SQL】连接 —— 内连接、外连接、左连接、右连接、交叉连接

    连接 · 内连接 · 外连接 · 左连接 · 右连接 · 全连接 · 交叉连接 · 匹配符号(+)  连接  根据表之间的关系,呈现跨表查询的结果.     外连接     内连接 左连接 右连接 全 ...

  3. SQL Server DAC——专用管理员连接

    今天打开数据库刚要连接时,看到“连接到服务器”窗口,突发的想到:要是SQL Server 不再响应正常的连接请求,又想使用数据库时,我们该怎么办?      其实我们还能通过“SQL Server D ...

  4. JDBC与SQL SERVER各个版本的连接方法

    转至:blog.csdn.net/ying5420/article/details/4488246 1.SQL SERVER 2000 JDBC驱动程序:msbase.jar.mssqlserver. ...

  5. 解决SQL Server管理器无法连接远程数据库Error: 1326错误

    解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例 ...

  6. SQL Server 2005无法远程连接的解决方法

    以前一直连接本地的数据库,连接SQL Server 2005是小菜的... 做项目也是老师搭好了服务器端,打上IP去访问就行...也不用考虑太多. 今天自己在公司搭SQL Server 2005服务器 ...

  7. JDBC连接SQL server与ADO.NET连接Sql Server对比

    JDBC连接SQL server与ADO.NET连接Sql Server对比 1.JDBC连接SQL server 1)java方面目前有很多驱动能够驱动连接SQL servernet.   主流的有 ...

  8. 利用Ring Buffer在SQL Server 2008中进行连接故障排除

    原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...

  9. sql server 2008 64位连接sql 2000服务器的时候出现

    来源 https://blog.csdn.net/loeley/article/details/7095741 sql server 2008 64位连接sql 2000服务器的时候出现以下提示: 链 ...

  10. SQL Server 2005无法远程连接的解决方法 (转帖)

    方法如下:  一.为 SQL Server 2005 启用远程连接1. 单击"开始",依次选择"程序"."Microsoft SQL Server 2 ...

随机推荐

  1. 【winform】基于UserControl实现webBrower组件时html页面元素加载及onclick事件监听实现

    [背景]基于System.Windows.Forms.UserControl实现的webBrower组件在html内使用window.external调用winform事件失败. [解决思路]借助wi ...

  2. [论文]Coordination of Cluster Ensembles via Exact Methods

    作者:Ioannis T. Christou, Member, IEEE IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, ...

  3. linux 实现共享内存同步

    本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.它是IPC对象的一种. 为了在多个进程间交换信息,内核专门留出了 ...

  4. HDU 1999 不可摸数【类似筛法求真因子和】

    不可摸数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. 转:Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  6. servlet源码查看

    1,下载源码,点击此处可下载 2,创建web项目 我这里以jdbc这个web项目为例讲解 在javaee libraries中有个javaee.jar包,选中它-->右击-->Proper ...

  7. 使用 VS2010 开发 MapXtreme2008 遇到的问题 无法复制文件“C:\Program Files\Common Files\MapInfo\MapXtreme\7.0.0\Compiler.DLL”,原因是找不到该文件

    将需要引用的mapxtreme的dll引用到项目中,然后右键“属性”,将"复制本地“值改成false,编译成功

  8. 算法之美--2.2 Array

    2016-12-02    00:24:12 利用抽象数据类型实现Array:主要用C++模板实现数组类:体会一个完整的C++类的写法,能顺利写出来的人不多了,特别是对复制构造函数和重载= []运算, ...

  9. 亿图图示专家V7破解版

    “破解文件”目录下的三个文件拷贝出来复制到安装目录下即可: 下载链接地址: http://cloud.suning.com/cloud-web/share/link.htm?sk=718100ef90 ...

  10. ClassPathXmlApplicationContext和FileSystemXmlApplicationContext区别

    ClassPathXmlApplicationContext 默认文件路径是src下那一级classpath:和classpath*:的区别: classpath: 只能加载一个配置文件,如果配置了多 ...