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

  • 相关阅读:
    企业使用数据库的12种姿势
    回归架构本质,重新理解微服务
    Java中随机数的产生方式与原理
    自动类型转换、强制类型转换、作用域、整型表数范围
    创建自定义类的对象数组
    CentOS上安装比较习惯的代码编辑器
    ubuntu 15.04 的安装遇到的问题及其解决方法
    算法思想篇(1)————枚举算法
    初来乍到
    Eclipse中获取html jsp 标签的属性提示信息方法
  • 原文地址:https://www.cnblogs.com/KingUp/p/5722583.html
Copyright © 2020-2023  润新知