读书人

sql-马下给分!

发布时间: 2013-03-19 17:22:05 作者: rapoo

求一个sql---在线等马上给分!!!
表:xiaoshou
字段:id ,username
数据:1 张三
2 李四
表:dingdan
字段:id ,ordertotal
1 100
1 50

sql:select username,sum(ordertotal) as ordertotal from xiaoshou left outer join dingdan on xiaoshou.id=dingdan.id where ordertotal>0 group by username

查询结果:username ordertotal
张三 150

希望得到的结果:username ordertotal
张三 150
李四 0
即使“李四”没有数据也要显示李四的名字,且ordertotal为0。

多谢!!
[解决办法]
select username,isnull(sum(ordertotal),0) as ordertotal from xiaoshou left outer join dingdan on xiaoshou.id=dingdan.id group by username
[解决办法]


mysql> select * from xiaoshou;
+------+----------+

[解决办法]
id
[解决办法]
username
[解决办法]

+------+----------+

[解决办法]
1
[解决办法]
zhangsan
[解决办法]


[解决办法]
2
[解决办法]
lisi
[解决办法]

+------+----------+
2 rows in set (0.00 sec)

mysql> select * from dingdan;
+------+------------+

[解决办法]
id
[解决办法]
ordertotal
[解决办法]

+------+------------+

[解决办法]
1
[解决办法]
100
[解决办法]


[解决办法]
1
------解决方案--------------------


50
[解决办法]

+------+------------+
2 rows in set (0.00 sec)

mysql> select t1.username, ifnull(sum(t2.ordertotal),0) as ordertotal from xiao
shou t1 left join dingdan t2 on t1.id = t2.id group by t1.username;
+----------+------------+

[解决办法]
username
[解决办法]
ordertotal
[解决办法]

+----------+------------+

[解决办法]
lisi
[解决办法]
0
[解决办法]


[解决办法]
zhangsan
[解决办法]
150
[解决办法]

+----------+------------+
2 rows in set (0.00 sec)


[解决办法]
select username,sum(ordertotal) as ordertotal from xiaoshou left join dingdan t2  on t1.id = t2.id where ordertotal>0 or username='李四' group by username


如果仅仅是要李四,直接这样写。如果是所有为0的都要出来的话
估计要多家一个字段来区别了,我是想不到有什么方法了
[解决办法]
select a.id,isnull(b.o_t,0) as ordertotal
from xiaoshu a left join
(select id, sum(ordertotal) as o_t from dingdan where ordertotal>0 group by id ) b
on a.id=b.id

[解决办法]
报歉,上面写错一个字段
select a.usernamer,isnull(b.o_t,0) as ordertotal
from xiaoshu a left join
(select id, sum(ordertotal) as o_t from dingdan where ordertotal>0 group by id ) b
on a.id=b.id

读书人网 >SQL Server

热点推荐