有表MONEY
字段 TYPE MONEY CLASS内容 付款 1000   前期收入
     支出  200
    付款  200   后期收入
     付款  1000  后期收入如何用一条语句能算出 付款=2200元,支出-200元。前期收入1000元,后期收入1200元。

解决方案 »

  1.   

    --CREATE TABLE [MONEY] ([TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))
    --INSERT INTO [MONEY]
    --SELECT  '付款', 1000 ,  '前期收入'
    --UNION ALL SELECT '支出',  200,NULL 
    --UNION ALL SELECT     '付款',  200 ,  '后期收入'
    --UNION ALL SELECT '付款',  1000,  '后期收入'
    SELECT  SUM([付款])[付款] ,
            SUM(支出)支出 ,
            SUM(前期收入) 前期收入,
            SUM(后期收入)后期收入
    FROM    ( SELECT    '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
                                        ELSE 0
                                   END) ,
                        '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
                                             ELSE 0
                                        END) ,
                        '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
                                          ELSE 0
                                     END) ,
                        '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
                                          ELSE 0
                                     END)
              FROM      [money]
              GROUP BY  [type]
            ) a
    /*
    付款          支出          前期收入        后期收入
    ----------- ----------- ----------- -----------
    2200        -200        1000        1200(1 行受影响)*/
      

  2.   


    正解。如可再加上一个条件呢?
    WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'"
      

  3.   

    不过你那个where是前端拼接的吧--CREATE TABLE [MONEY] ([TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))
    --INSERT INTO [MONEY]
    --SELECT  '付款', 1000 ,  '前期收入'
    --UNION ALL SELECT '支出',  200,NULL 
    --UNION ALL SELECT     '付款',  200 ,  '后期收入'
    --UNION ALL SELECT '付款',  1000,  '后期收入'
    SELECT  SUM([付款])[付款] ,
            SUM(支出)支出 ,
            SUM(前期收入) 前期收入,
            SUM(后期收入)后期收入
    FROM    ( SELECT    '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
                                        ELSE 0
                                   END) ,
                        '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
                                             ELSE 0
                                        END) ,
                        '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
                                          ELSE 0
                                     END) ,
                        '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
                                          ELSE 0
                                     END)
              FROM      [money]
              WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'"
              GROUP BY  [type]
            ) a
    /*
    付款          支出          前期收入        后期收入
    ----------- ----------- ----------- -----------
    2200        -200        1000        1200
     
    (1 行受影响)
     
    */
      

  4.   

    其实同理啊,加case when咯。不过你这结构有点难幻想
      

  5.   

    我思考,少要码,不然我这分都不够你用,不知道你那个押金是对应什么列,我就用个a来代替--CREATE TABLE [MONEY] ([a] VARCHAR(10),[TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))
    --INSERT INTO [MONEY]
    --SELECT  NULL ,'付款', 1000 ,  '前期收入'
    --UNION ALL SELECT '押金', '支出',  200,NULL 
    --UNION ALL SELECT  NULL ,   '付款',  200 ,  '后期收入'
    --UNION ALL SELECT '押金','付款',  1000,  '后期收入'SELECT  SUM([付款]) [付款] ,
            SUM(支出) 支出 ,
            SUM(前期收入) 前期收入 ,
            SUM(后期收入) 后期收入 ,
            SUM(支出押金) 支出押金 ,
            SUM(收入押金) 收入押金
    FROM    ( SELECT    '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
                                        ELSE 0
                                   END) ,
                        '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
                                             ELSE 0
                                        END) ,
                        '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
                                          ELSE 0
                                     END) ,
                        '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
                                          ELSE 0
                                     END) ,
                        '支出押金' = SUM(CASE WHEN [type] = '支出'
                                               AND [a] = '押金' THEN [money]
                                          ELSE 0
                                     END) ,
                        '收入押金' = SUM(CASE WHEN [type] = '付款'
                                               AND [a] = '押金' THEN [money]
                                          ELSE 0
                                     END)
              FROM      [money]
              GROUP BY  [type]
            ) a
            
            
    /*
    付款          支出          前期收入        后期收入        支出押金        收入押金
    ----------- ----------- ----------- ----------- ----------- -----------
    2200        -200        1000        1200        200         1000(1 行受影响)*/
      

  6.   

    有表MONEY
     字段 TYPE MONEY CLASS
     
    内容 付款 1000   前期收入
          支出  200
         付款  200   后期收入
          付款  1000  后期收入其实就是另一个字段 REMARK标注是“押金”的于算出押金的数据。