一句SQL按照某个字段数值拆分出对应的数据条数,借助数据库常量表【master..spt_values】实现
简介:master..spt_values,数据行拆分简单小技巧
SELECT ProjGUID ,
CostGUID ,
SUM(FtAmount) AS FtAmount ,
BeginMonth ,
EndMonth ,
( EndMonth - BeginMonth ) + 1 AS RowCountNum
FROM cb_Loan2Cost
WHERE LoanGUID = '6D88EB2B-18FA-4A4A-9ADB-9873B0F14381'
GROUP BY ProjGUID ,
CostGUID ,
EndMonth ,
BeginMonth
SQl结果集查出如下图:

一句话拆分出对应的数据条数: SELECT
M.ProjGUID,
M.CostGUID,
CASE WHEN M.XnMonth=M.EndMonth THEN M.NewFtAmount+(M.FtAmount-M.NewFtAmount*M.FactMonth) ELSE M.NewFtAmount END FactFtAmount,
M.FactMonth
FROM (
SELECT T.ProjGUID ,
T.CostGUID ,
T.FtAmount / T.RowCountNum AS NewFtAmount ,
T.FtAmount,
T.BeginMonth ,
T.EndMonth ,
CASE WHEN BeginMonth = EndMonth THEN EndMonth ELSE spt.number END FactMonth,
spt.number AS XnMonth
FROM ( SELECT ProjGUID ,
CostGUID ,
SUM(FtAmount) AS FtAmount ,
BeginMonth ,
EndMonth ,
( EndMonth - BeginMonth ) + 1 AS RowCountNum
FROM cb_Loan2Cost
WHERE LoanGUID = '6D88EB2B-18FA-4A4A-9ADB-9873B0F14381'
GROUP BY ProjGUID ,
CostGUID ,
EndMonth ,
BeginMonth
) T ,
master..spt_values spt
WHERE T.RowCountNum >= spt.number
AND spt.type = 'P'
AND spt.number > 0
)M
最终结果集如下图:

拆分SQL核心如下:
借助数据库常量表:master..spt_values
此表记录都是数据库中常用的常量值
SELECT number FROM master..spt_values
简单的小例子
create table T(A varchar(10), B varchar(10), C int) insert into T
select 'AA', '笔', 5 union all
select 'AB', '纸', 3

select t.A 编码, t.B as 名称,1 as 数量
from t,master..spt_values s
where t.c>= s.number and s.type= 'P' and s.number >0

一句SQL按照某个字段数值拆分出对应的数据条数,借助数据库常量表【master..spt_values】实现的更多相关文章
- Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、
查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...
- 常用sql:按照表中的某一列对数据进行分组,统计数据条数
select FROM_UNIXTIME(start_time,'%Y-%m-%d')as date,COUNT(*) FROM random_num GROUP BY FROM_UNIXTIME(s ...
- tableZen maxHeight 解决方案 如果数据条数小于N,不进行高度设置,超过N条,直接设置高度,解决原生iview Table 对于右侧固定列,不能计算出正确数值的解决方案
tableZen maxHeight 解决方案 如果数据条数小于N,不进行高度设置,超过N条,直接设置高度,解决原生iview Table 对于右侧固定列,不能计算出正确数值的解决方案 if (thi ...
- SQL Server根据字段查询不出记录
今天写了一条select语句,很奇怪的一件事,我写程序几年了,第一次碰到这个问题,就是数据库里有这个值,你根据这个值查询就是查询不出来这行记录. 所以我想是不是里面有空格,回车什么的,最后果然如此. ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- SQL Server 得到数据库中所有表的名称及数据条数
--方法一if exists ( select * from dbo.sysobjects where id = object_id(N'[dbo].[TableSpace]') and object ...
- Mysql常用sql语句(6)- limit 限制查询结果的条数
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 实际工作中,我们的数据表数据肯定都是万级别的,如 ...
- sql 查询当前数据库所有表格以及所有表格数据条数
select b.name as tablename , a.rowcnt as datacount from sysindexes a , sysobjects b where a.id = b.i ...
- sql server 2005 表master..spt_values
IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #tGOcreate table #t(id int identity,Dt varchar(10) ...
随机推荐
- ArcGIS api for javascript——显示多个查询结果
描述 本例展示了在重叠的多边形处理查询的一种方式.单击一个石油和天然气的字段来查看地图上的高亮显示.如果仅仅点击一个要素,能够在单击一次来查看包含一些属性的InfoWindow.如果偶然单击到重叠的要 ...
- Java排序算法(二):简单选择排序
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...
- vue6 发请求
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- css如何实现垂直居中(5种方法)
css如何实现垂直居中(5种方法) 一.总结 一句话总结:行内只需要简单地把 line-height 设置为那个对象的 height 值就可以使文本居中了. 块的话可以尝试 margin:auto: ...
- HDU 5375 Gray Code 动归
题意:给你一串不确定的二进制码,其对应的格雷码的每一位有对应的权值,问转换成的格雷码的能取到的最大权值是多少. 思路:没有思路,乱搞也AC #pragma comment(linker, " ...
- 洛谷P1586 四方定理
题目描述 四方定理是众所周知的:任意一个正整数nn ,可以分解为不超过四个整数的平方和.例如:25=1^{2}+2^{2}+2^{2}+4^{2}25=12+22+22+42 ,当然还有其他的分解方案 ...
- XML结构,写到TreeView树上
http://blog.csdn.net/ztzi321/article/details/44077563
- Scrapy框架使用代理
使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...
- jQuery 判断是否包含在数组中 jQuery.inArray()
var arr = [ "mysql", "php", "css", "js" ]; $.inArray(" ...
- HDU 3911 Black And White
Black And White Time Limit: 3000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...