当我们在使用Group By进行分组统计的时候,往往都会根据一个字段进行分组统计(并且这个字段是关联在这张表中的),这应该好实现。

但是当这张数据表中的某些数据要根据列一张表的某个字段进行分组统计的时候,往往会借助Inner Join来实现,以下图为例:

转存失败重新上传取消

现在要达到的效果是:表2中的数据要根据表1来进行分组统计,在统计表2中的数据时,表2中的ReadDate要大于或者等于表1中的CreateDate,并且小于表1中的EndDate。

以下是这两张表的Sql语句:

表1:

SELECT TOP 2 aa.AccountID,aa.AccountCode,aa.AccountName,aa.CreateDate,aa.EndDate,aa.EndAccountFlag

FROM ArchiveAccount aa

WHERE aa.AccountID IN

(

SELECT DISTINCT rmfd.AccountID FROM ReadMeterFeeDetail rmfd

LEFT JOIN ArchiveAccount aa ON rmfd.AccountID=aa.AccountID

WHERE rmfd.CustID IN

(

SELECT CustID FROM Archive_CustInfo aci

WHERE aci.CbbID IN

(

SELECT aci2.CbbID FROM Archive_CbbInfo aci2

WHERE aci2.GaswellID=2 AND aci2.CompanyID=1

)

AND aci.CompanyID=1

) AND aa.CompanyID=1 AND aa.EndAccountFlag=1

)

ORDER BY aa.CreateDate DESC

表2:

SELECT (ModifyGasCount+ReadMeterNumber-LastReadMeterNumber) DData,ReadDate FROM

(

SELECT rmgd.ReadDate,rmgd.LastReadMeterNumber,rmgd.ReadMeterNumber,rmgd.ModifyGasCount

FROM ReadMeterGaswellDetail rmgd

LEFT JOIN Archive_Gaswell ag ON rmgd.GaswellID=ag.GaswellID

LEFT JOIN DC_Archive_Llj dal ON rmgd.lljID=dal.id

WHERE rmgd.GaswellID=2 AND dal.startorstop=0 AND ag.CompanyID=1

) tb_Total

使用Inner Join就可以按照表1来进行分组统计,Sql语句如下所示:

--表2

SELECT SUM(DData) DData,AccountID FROM

(

SELECT (ModifyGasCount+ReadMeterNumber-LastReadMeterNumber) DData,AccountID FROM

(

SELECT rmgd.ReadDate,rmgd.LastReadMeterNumber,rmgd.ReadMeterNumber,rmgd.ModifyGasCount,aa.AccountID,aa.CreateDate

FROM ReadMeterGaswellDetail rmgd

LEFT JOIN Archive_Gaswell ag ON rmgd.GaswellID=ag.GaswellID

LEFT JOIN DC_Archive_Llj dal ON rmgd.lljID=dal.id

INNER JOIN

(

--表1

SELECT TOP 2 aa.AccountID,aa.AccountCode,aa.AccountName,aa.CreateDate,aa.EndDate,aa.EndAccountFlag

FROM ArchiveAccount aa

WHERE aa.AccountID IN

(

SELECT DISTINCT rmfd.AccountID FROM ReadMeterFeeDetail rmfd

LEFT JOIN ArchiveAccount aa ON rmfd.AccountID=aa.AccountID

WHERE rmfd.CustID IN

(

SELECT CustID FROM Archive_CustInfo aci

WHERE aci.CbbID IN

(

SELECT aci2.CbbID FROM Archive_CbbInfo aci2

WHERE aci2.GaswellID=2 AND aci2.CompanyID=1

)

AND aci.CompanyID=1

) AND aa.CompanyID=1 AND aa.EndAccountFlag=1

)

ORDER BY aa.CreateDate DESC

)

aa ON

(

rmgd.ReadDate>=aa.CreateDate AND

rmgd.ReadDate<(CASE aa.EndAccountFlag WHEN 1 THEN aa.EndDate ELSE GETDATE() end)

)

WHERE rmgd.GaswellID=2 AND dal.startorstop=0 AND ag.CompanyID=1

) tb_Total WHERE tb_Total.CreateDate>='2012-01-01 00:00:00.000' AND tb_Total.CreateDate<='2012-12-12 23:59:59.999'

) tb_Total1 GROUP BY tb_Total1.AccountID

运行结果如下图所示:

转存失败重新上传取消

SqlServer中Group By高级使用--Inner Join分组统计相关推荐

  1. winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...

    开篇 本篇文章主要是帮助刚开始接触CrystalReport报表的新手提供一个循序渐进的教程.该教程主要分为三个部分1)CrystalReport的基本使用方法:2)使用CrystalReport对数 ...

  2. SQLServer中利用NTILE函数对数据进行分组的一点使用

    本文出处:http://www.cnblogs.com/wy123/p/6908377.html NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组, ...

  3. group by 按某一时间段分组统计并查询

    工作中要求对日志表中的时间戳字段进行分组.分组的条件是,相隔 1分钟间隔的被分到一组. 数据库表是这样的 SELECT COUNT(log_id) AS u_count FROM logdb.`log ...

  4. oracle的高级分组函数,group by 高级函数使用

    在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...

  5. 【Elasticsearch】Elasticsearch如何实现 SQL语句中 Group By 和 Limit 的功能

    1.概述 转载:https://elasticsearch.cn/article/629 有 SQL 背景的同学在学习 Elasticsearch 时,面对一个查询需求,不由自主地会先思考如何用 SQ ...

  6. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  7. SQL中group by的用法总结

    一.简介SQL语言 SQL语言,是结构化查询语言的简称.SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库脚本文件的扩展名.   SQL语言,是高 ...

  8. Sqlserver中一直在用又经常被忽略的知识点一

    已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...

  9. 把sqlserver中存储过程改写到oracle中

    一同学叫我帮忙改存储过程sqlserver----->oralce数据中: sqlserver中存储过程: SET QUOTED_IDENTIFIER ON     GO  SET ANSI_N ...

  10. SQL语句中的select高级用法

    #转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...

最新文章

  1. Codeforces Round #253 (Div. 1) A. Borya and Hanabi 暴力
  2. 检索com类工厂 80070005_Hands-On Design Patterns With C++(十二)友元工厂
  3. 网络编程学习笔记(tcp_connect函数)
  4. BZOJ2091 [Poi2010]The Minima Game
  5. 【博客征文】畅谈百度轻应用初体验
  6. mysql在linux下的安装(5.7版本以后)
  7. 纯CSS实现帅气的SVG路径描边动画效果
  8. MySQL2种多实例部署方式总结
  9. 《汇编语言》王爽—第八章实验七详解
  10. 曾逼马云道歉,扬言5年超过阿里!3年后市值差了3万亿 !
  11. 应用程序部署策略——虚拟机与容器
  12. HTML5给Web带来9大改变
  13. 4.3 AlexNet CNN、tensorflow实现——python实战
  14. Codeforces 354C Vasya and Beautiful Arrays
  15. [No0000174]Spring常用注解(收藏大全)
  16. 微信小程序Axure元件库
  17. 五笔字根表识别码图_五笔字体识别码规则图 五笔输入法字根表
  18. oracle执行计划分析
  19. java导出带图片excel
  20. 原生js删除节点、替换节点、复制节点

热门文章

  1. BizTalk学习笔记系列之四: BizTalk功能介绍
  2. (一)如何实现一个单进程阻塞的网络服务器
  3. 主帅的一道坎?亚洲杯至今已有九位主帅离任
  4. 移动磁盘提示使用驱动器中的光盘之前需要格式化文件怎么找回
  5. Eclipse或者Myeclipse卡,慢的解决方法
  6. Group By和Order By的总结
  7. 微软职位内部推荐-Software Engineer II-Senior Software Engineer for Satori
  8. fixed定位之后,如何让div上下垂直居中
  9. 25.docker commit
  10. 122. PHP 性能问题(3)