数据如上图,想要的结果是这样的,根据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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
参考一下这个贴子的提问方式 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
他还要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
结帖率: 0%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html
8、如何给分和结贴?
http://bbs.csdn.net/help#post_dispose
#7
非常感谢两位的解答,但是我测试了一下还是不对,我需要的结果是这样的
#8
SELECT id,CASE WHEN lend_time IS NULL THEN 0 ELSE principal END AS principal
FROM tbl_name
GROUP BY id
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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
参考一下这个贴子的提问方式 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
他还要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
结帖率: 0%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html
8、如何给分和结贴?
http://bbs.csdn.net/help#post_dispose
#7
非常感谢两位的解答,但是我测试了一下还是不对,我需要的结果是这样的
#8
SELECT id,CASE WHEN lend_time IS NULL THEN 0 ELSE principal END AS principal
FROM tbl_name
GROUP BY id
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;