标签:级联 技术分享 实践 时间 dev gravity get order by name
我開始先用了级联查询并计算,但是效果并不太理想。最后了解到连接查询,经过重复试验,最终有了下面成果:
<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语句中连接的甜头,于是小编在网上搜索之后并自己实践,有了以下成果:
说明:以左表为基础,查询右表中全部符合条件的信息,不存在的用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>结果例如以下:
说明:以右表为基础,查询左表中全部符合条件的信息,不存在的用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>结果例如以下:
说明:将两个表中的信息都查出来,没有相应的信息,用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>结果例如以下:
说明:仅仅显示符合条件的信息,条件能够是(=、<、>、<>、<=、>=、!<、!>),以下仅仅介绍条件为=的内容
<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>结果例如以下:
说明:将查到两个表中的全部数据的乘积(假设每一个表中都有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>结果例如以下:
说明:将上面查到的无条件的结果依照条件进行筛选可是这里仅仅能用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>结果例如以下:
标签:级联 技术分享 实践 时间 dev gravity get order by name
原文地址:http://www.cnblogs.com/wzjhoutai/p/7221850.html