后一列有数据猜求和前一列的数据,怎么编写sql语句?求大神指导

时间:2021-11-12 10:31:46
后一列有数据猜求和前一列的数据,怎么编写sql语句?求大神指导

数据如上图,想要的结果是这样的,根据id分组,然后判断条件是lend_time,如果lend_time有值,那就求和principal并显示,如果lend_time为空,则显示为0,但是问题是id为1的lend_time只有一个,principal却有2个,而我显示的时候只能显示1000,而不是6000(1000+5000),也就是说有lend_time值的时候才求和,没有lend_time则加入的值为0,求大神帮忙。

10 个解决方案

#1


   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

#2


select id, sum(principal) from tb where id in ( select id from tb where lend_time is not null )

#3


SELECT IF(ISNULL(a),0,b) AS b FROM (
SELECT SUM(UNIX_TIMESTAMP(lend_time)) AS a,SUM(principal) AS b
FROM test 
GROUP BY id
) AS t

大概是这样吧,其实很简单,就是你的题设说的不清楚

#4


引用 2 楼 zjcxc 的回复:
select id, sum(principal) from tb where id in ( select id from tb where lend_time is not null )

他还要lend_time为空的时候principal显示0

#5


select id, case when max(lend_time) is null then 0 else sum(principal) end from tb group by id 

#7


非常感谢两位的解答,但是我测试了一下还是不对,我需要的结果是这样的 后一列有数据猜求和前一列的数据,怎么编写sql语句?求大神指导

#8


SELECT id,CASE WHEN lend_time IS NULL THEN 0 ELSE principal END AS principal
FROM tbl_name
GROUP BY id

#9


试下这个
SELECT id,
SUM(CASE WHEN lend_time IS NULL THEN 0 
ELSE principal 
END) AS principal
FROM Table
GROUP BY id

#10


SELECT 
    t.id,
    CASE
        WHEN t.lend_time IS NULL THEN 0
        ELSE t.principal
    END total
FROM
    (SELECT 
        a.id, a.lend_time, a.principal
    FROM
        test_qty1 a
    GROUP BY a.id) t;

#1


   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://bbs.csdn.net/topics/320211382
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

#2


select id, sum(principal) from tb where id in ( select id from tb where lend_time is not null )

#3


SELECT IF(ISNULL(a),0,b) AS b FROM (
SELECT SUM(UNIX_TIMESTAMP(lend_time)) AS a,SUM(principal) AS b
FROM test 
GROUP BY id
) AS t

大概是这样吧,其实很简单,就是你的题设说的不清楚

#4


引用 2 楼 zjcxc 的回复:
select id, sum(principal) from tb where id in ( select id from tb where lend_time is not null )

他还要lend_time为空的时候principal显示0

#5


select id, case when max(lend_time) is null then 0 else sum(principal) end from tb group by id 

#6


#7


非常感谢两位的解答,但是我测试了一下还是不对,我需要的结果是这样的 后一列有数据猜求和前一列的数据,怎么编写sql语句?求大神指导

#8


SELECT id,CASE WHEN lend_time IS NULL THEN 0 ELSE principal END AS principal
FROM tbl_name
GROUP BY id

#9


试下这个
SELECT id,
SUM(CASE WHEN lend_time IS NULL THEN 0 
ELSE principal 
END) AS principal
FROM Table
GROUP BY id

#10


SELECT 
    t.id,
    CASE
        WHEN t.lend_time IS NULL THEN 0
        ELSE t.principal
    END total
FROM
    (SELECT 
        a.id, a.lend_time, a.principal
    FROM
        test_qty1 a
    GROUP BY a.id) t;