有一个表名为proctable,结构为:用户名 | 账号 | 汇入标记 | 金额 | 余额
--------------------------------------
name | code | flag | Amount | Balance说明:这里的汇入标记含义为如果是汇入,则标记为字符'c',汇出标记为字符'd';
我需要把汇入汇出汇总分组显示出来像下面:___________________________________________
| | |_____汇入____|_____汇出____|
|用户名 | 账号 | 金额 | 余额 | 金额 | 余额 |
--------------------------------------------按账号左右连接,不能对应的值响应为空。我这么写的
SELECT * FROM
(SELECT name as 用户名,code as 账号,amount as 金额1,balance as 余额1 FROM proctable
WHERE flag='c') a
INNER JOIN
(SELECT name as 用户名2,code as 账号2,amount as 金额2,balance as 余额2 FROM proctable
WHERE flag='d') b
ON a.账号 = b.账号2
但是结果左右两边都有大量重复记录,请问恩人这种汇总怎么写的该?磕头了!
--------------------------------------
name | code | flag | Amount | Balance说明:这里的汇入标记含义为如果是汇入,则标记为字符'c',汇出标记为字符'd';
我需要把汇入汇出汇总分组显示出来像下面:___________________________________________
| | |_____汇入____|_____汇出____|
|用户名 | 账号 | 金额 | 余额 | 金额 | 余额 |
--------------------------------------------按账号左右连接,不能对应的值响应为空。我这么写的
SELECT * FROM
(SELECT name as 用户名,code as 账号,amount as 金额1,balance as 余额1 FROM proctable
WHERE flag='c') a
INNER JOIN
(SELECT name as 用户名2,code as 账号2,amount as 金额2,balance as 余额2 FROM proctable
WHERE flag='d') b
ON a.账号 = b.账号2
但是结果左右两边都有大量重复记录,请问恩人这种汇总怎么写的该?磕头了!
解决方案 »
- 学习sql server时遇到的一点疑惑!
- 调用SQL存储过程,返回数据集到EXCEL中,求解??问了好多地方,没人回答吗?
- 求一sql问题,谁帮帮忙
- 求一SQL语句,当指定字段有重复内容时只保留一条记录,删除多于的。
- 请教一个“去除表中某一字段前后空格”的查询语句
- 我想取出企业管理器中设计表结构的时候那个字段描述,怎么办?
- 这个怎么查询为好
- ADO的BUG?
- 呀,我这个帖子怎么没有人看呀,提点建议也好呀????????????????????
- SQLSERVER资源管理器中看不到表,但是可以select到,请问是什么原因。
- 为什么用ADODB.STREAM对象保存文件奇慢?
- 关于 left join 之后某个列名无效的问题,请教一下
sum(case flag when 'c' then amount end),
sum(case flag when 'c' then balance end),
sum(case flag when 'd' then amount end) ,
sum(case flag when 'd' then balance end)from tb group by name ,code
--这样试试
(SELECT name as 用户名,code as 账号,sum(amount) as 金额1,sum(balance) as 余额1 FROM proctable
WHERE flag='c' group by code,name) a
INNER JOIN
(SELECT name as 用户名2,code as 账号2,sum(amount) as 金额2,sum(balance) as 余额2 FROM proctable
WHERE flag='d' group by code,name) b
ON a.账号 = b.账号2
甲的当天汇入和甲的当天汇出的明细,左边是汇入(汇入金额,汇入后余额),右边是汇出(汇出金额,汇出后余额),一天当中,甲有可能有10笔汇入,6笔汇出,这样子,把汇入和汇出分别通过flag标记检索后左右两边连接起来,为空的就是为空,而我检索出来后,应为空的地方被用重复的记录填充进去了.
select name,code,
case flag when 'c' then amount else null end) as [汇入金额],
case flag when 'c' then balance else null end) as [汇入余额],
case flag when 'd' then amount else null end) as [汇出金额],
case flag when 'd' then balance else null end) as [汇出余额],
from tb
作揖了,磕头了!恩人啊!恩人啊!谢谢诸位.谢谢CCTV,谢谢MSN,谢谢观众朋友们,谢谢老潘!