一句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

转载于:https://www.cnblogs.com/KingUp/p/5722583.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值