SqlServer中Group By高级使用--Inner Join分组统计
当我们在使用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分组统计相关推荐
- winform定义数据源名称_WinForm中使用CrystalReport水晶报表——基础,分组统计,自定义数据源...
开篇 本篇文章主要是帮助刚开始接触CrystalReport报表的新手提供一个循序渐进的教程.该教程主要分为三个部分1)CrystalReport的基本使用方法:2)使用CrystalReport对数 ...
- SQLServer中利用NTILE函数对数据进行分组的一点使用
本文出处:http://www.cnblogs.com/wy123/p/6908377.html NTILE函数可以按照指定的排序规则,对数据按照指定的组数(M个对象,按照某种排序分N个组)进行分组, ...
- group by 按某一时间段分组统计并查询
工作中要求对日志表中的时间戳字段进行分组.分组的条件是,相隔 1分钟间隔的被分到一组. 数据库表是这样的 SELECT COUNT(log_id) AS u_count FROM logdb.`log ...
- oracle的高级分组函数,group by 高级函数使用
在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...
- 【Elasticsearch】Elasticsearch如何实现 SQL语句中 Group By 和 Limit 的功能
1.概述 转载:https://elasticsearch.cn/article/629 有 SQL 背景的同学在学习 Elasticsearch 时,面对一个查询需求,不由自主地会先思考如何用 SQ ...
- SqlServer中Sql语句的逻辑执行顺序
准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...
- SQL中group by的用法总结
一.简介SQL语言 SQL语言,是结构化查询语言的简称.SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库脚本文件的扩展名. SQL语言,是高 ...
- Sqlserver中一直在用又经常被忽略的知识点一
已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...
- 把sqlserver中存储过程改写到oracle中
一同学叫我帮忙改存储过程sqlserver----->oralce数据中: sqlserver中存储过程: SET QUOTED_IDENTIFIER ON GO SET ANSI_N ...
- SQL语句中的select高级用法
#转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...
最新文章
- Codeforces Round #253 (Div. 1) A. Borya and Hanabi 暴力
- 检索com类工厂 80070005_Hands-On Design Patterns With C++(十二)友元工厂
- 网络编程学习笔记(tcp_connect函数)
- BZOJ2091 [Poi2010]The Minima Game
- 【博客征文】畅谈百度轻应用初体验
- mysql在linux下的安装(5.7版本以后)
- 纯CSS实现帅气的SVG路径描边动画效果
- MySQL2种多实例部署方式总结
- 《汇编语言》王爽—第八章实验七详解
- 曾逼马云道歉,扬言5年超过阿里!3年后市值差了3万亿 !
- 应用程序部署策略——虚拟机与容器
- HTML5给Web带来9大改变
- 4.3 AlexNet CNN、tensorflow实现——python实战
- Codeforces 354C Vasya and Beautiful Arrays
- [No0000174]Spring常用注解(收藏大全)
- 微信小程序Axure元件库
- 五笔字根表识别码图_五笔字体识别码规则图 五笔输入法字根表
- oracle执行计划分析
- java导出带图片excel
- 原生js删除节点、替换节点、复制节点