zoukankan      html  css  js  c++  java
  • 一条每2行汇总的SQL题目


    这里就原问题及参考答案列出如下:

    /*

    编号      金额
    -------------------
    100101   12.0000
    100102   20.0000
    100103   23.0000
    100104   55.0000
    100105   77.0000
    100106   33.0000
    100107   67.0000
    100109   23.0000
    100110   43.0000

    要求结果是
    按第1、2行,第3、4行、第5、6行汇总

    no    account
    ------------------------
    100101--100102    32        
    100103--100104    78        
    100105--100106    110    
    100107--100109    90        
    100110--    43        

    --------------------------------------------------

    以列id为标识列
    要是表中没有标识列ID,或者标识列ID存在断缺行,需要新建立一个临时表,增加一新的标识列.
    基本的计算方法如下:
    */
    CREATE TABLE #T(id int IDENTITY(1,1),No nvarchar(20),account money)
    INSERT INTO #T
    SELECT '100101',12 UNION ALL
    SELECT '100102',20 UNION ALL
    SELECT '100103',23 UNION ALL
    SELECT '100104',55 UNION ALL
    SELECT '100105',77 UNION ALL
    SELECT '100106',33 UNION ALL
    SELECT '100107',67 UNION ALL
    SELECT '100109',23 UNION ALL
    SELECT '100110',43 


    SELECT ISNULL(Y.no,'')+'--'+ISNULL(Z.no,''AS no,X.account FROM 
        (
    SELECT CASE WHEN (1&A.id)=1 THEN A.id ELSE B.id END AS id,SUM(A.account) AS account
            
    FROM #T A LEFT OUTER JOIN #T B ON B.id+1=A.id
            
    GROUP BY CASE WHEN (1&A.id)=1 THEN A.id ELSE B.id END
        ) X 
    LEFT OUTER JOIN #T Y ON Y.id=X.id
        
    LEFT OUTER JOIN #T Z ON Z.id=X.id+1

    /*
    汇总的关键主要是中间的子SELECT语句
    SELECT CASE WHEN (1&A.id)=1 THEN A.id ELSE B.id END AS id,SUM(A.account) AS account
        FROM #T A LEFT OUTER JOIN #T B ON B.id+1=A.id
        GROUP BY CASE WHEN (1&A.id)=1 THEN A.id ELSE B.id END

    */

    /*
    no    account
    ------------------------
    100101--100102    32.0000        --第1-2行合计
    100103--100104    78.0000        --第3-4行合计
    100105--100106    110.0000    --第5-6行合计
    100107--100109    90.0000        --第7-8行合计
    100110--    43.0000        --第9-10行合计
    */

    DROP TABLE #T




  • 相关阅读:
    简单的so修改
    Android 模拟MotionEvent事件 触发输入法
    类模板使用示例(三) 类模板局部特化
    类模板使用示例(二)类模板整体特化
    模板类使用示例(一)
    泛函分析之赋范空间
    Cocos2d-x学习笔记(十二)3D特效
    Cocos2d-x学习笔记(十一)动作
    Cocos2d-x学习笔记(十)CC_CALLBACK回调函数相关宏
    Cocos2d-x学习笔记(九)场景切换
  • 原文地址:https://www.cnblogs.com/wghao/p/954192.html
Copyright © 2011-2022 走看看