请教SQL语句

jxdjxd1111 2008-01-19 11:07:19
T1 客商
A
B
C
T2 客户 供应商 借入 借出
A 8
A 2
A 1
B 3
C 4
如何实现查询
供应商 余额(借入-借出)
A 5
B 3
C -4
...全文
154 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangCK 2008-01-19
  • 打赏
  • 举报
回复
谢谢老乌龟..
loworth 2008-01-19
  • 打赏
  • 举报
回复
建表[CODE=SQL]
create table t1(客商 varchar(10))
insert into t1 values('A')
insert into t1 values('B')
insert into t1 values('C')
create table t2(客户 char(1),供应商 char(1),借入 int,借出 int)
insert into t2 select 'A', null, 8,0 UNION ALL
select null , 'A',0,2 UNION ALL
select null , 'A',0,1 UNION ALL
select 'B', null ,3,0 UNION ALL
select null , 'C',0,4
go

[/CODE]查询[CODE=SQL]
SELECT ISNULL([t2].[客户],[t2].[供应商]) AS [供应商],SUM(ISNULL([t2].[借入],0)-ISNULL([t2].[借出],0)) AS [余额]
FROM [t2]
JOIN [t1] ON [t2].[客户]=[t1].[客商] OR [t2].[供应商]=[t1].[客商]
GROUP BY ISNULL([t2].[客户],[t2].[供应商])

[/CODE]删除表[CODE=SQL]
drop table t1,t2

[/CODE]
中国风 2008-01-19
  • 打赏
  • 举报
回复
declare   @tb table(客户 char(1),供应商 char(1),借入 int,借出 int) 
insert into @tb select 'A', '', 8,0
insert into @tb select '' , 'A',0,2
insert into @tb select '' , 'A',0,1
insert into @tb select 'B', '' ,3,0
insert into @tb select '' , 'C',0,4



select
[供应商]= case when isnull(供应商,'')>'' then 供应商 else 客户 end,
sum(借入-借出) as 金额
from
@tb
group by case when isnull(供应商,'')>'' then 供应商 else 客户 end
/*


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)

供应商 金额
---- -----------
A 5
B 3
C -4

(所影响的行数为 3 行)



*/
dawugui 2008-01-19
  • 打赏
  • 举报
回复
OK了?

赶快结贴.我60,小梁20,谢谢.
jxdjxd1111 2008-01-19
  • 打赏
  • 举报
回复
爱新觉罗的表是正确的
liangCK 2008-01-19
  • 打赏
  • 举报
回复
顶龟.
liangCK 2008-01-19
  • 打赏
  • 举报
回复
你的表很有问题吧?

create table tb (客户 char(1),供应商 char(1),借入 int,借出 int)
insert into tb select 'A', 8 ,0
insert into tb select 'A', 0 ,2
insert into tb select 'A', 0 ,1
insert into tb select 'B', 3 ,0
insert into tb select 'C', 0 ,4

select * from tb

服务器: 消息 213,级别 16,状态 4,行 1
插入错误: 列名或所提供值的数目与表定义不匹配。
服务器: 消息 213,级别 16,状态 1,行 1
插入错误: 列名或所提供值的数目与表定义不匹配。
服务器: 消息 213,级别 16,状态 1,行 1
插入错误: 列名或所提供值的数目与表定义不匹配。
服务器: 消息 213,级别 16,状态 1,行 1
插入错误: 列名或所提供值的数目与表定义不匹配。
服务器: 消息 213,级别 16,状态 1,行 1
插入错误: 列名或所提供值的数目与表定义不匹配。
jxdjxd1111 2008-01-19
  • 打赏
  • 举报
回复
要关联T1表才行
dawugui 2008-01-19
  • 打赏
  • 举报
回复
create table tb1(客商 varchar(10))
insert into tb1 values('A')
insert into tb1 values('B')
insert into tb1 values('C')
create table tb2(客户 char(1),供应商 char(1),借入 int,借出 int)
insert into tb2 select 'A', '', 8,0
insert into tb2 select '' , 'A',0,2
insert into tb2 select '' , 'A',0,1
insert into tb2 select 'B', '' ,3,0
insert into tb2 select '' , 'C',0,4
go

select m.客商 供应商 , sum(isnull(n.借入,0) - isnull(n.借出,0)) 余额 from tb1 m,
(
select 客户,借入,借出 from tb2 where 供应商 = ''
union all
select 供应商,借入,借出 from tb2 where 客户 = ''
) n
where m.客商 = n.客户
group by m.客商
order by m.客商

drop table tb1,tb2

/*
供应商 余额
---------- -----------
A 5
B 3
C -4

(所影响的行数为 3 行)
*/
jxdjxd1111 2008-01-19
  • 打赏
  • 举报
回复
create table tb (客户 char(1),供应商 char(1),借入 int,借出 int)
insert into tb select 'A', 8 ,0
insert into tb select 'A', 0 ,2
insert into tb select 'A', 0 ,1
insert into tb select 'B', 3 ,0
insert into tb select 'C', 0 ,4
liangCK 2008-01-19
  • 打赏
  • 举报
回复
就是.你的表怎么对应.
dawugui 2008-01-19
  • 打赏
  • 举报
回复
咋对应?
jxdjxd1111 2008-01-19
  • 打赏
  • 举报
回复
哦忘了,应该是这样的条件
create table tb(客户 char(1),供应商 char(1),借入 int,借出 int)
insert into tb select 'A', 8,0
insert into tb select 'A',0,2
insert into tb select 'A',0,1
insert into tb select 'B', 3,0
insert into tb select 'C',0,4
wzy_love_sly 2008-01-19
  • 打赏
  • 举报
回复
该不是这样的表吧!
dawugui 2008-01-19
  • 打赏
  • 举报
回复
刚看到.
liangCK 2008-01-19
  • 打赏
  • 举报
回复
create table tb(客户 char(1),供应商 char(1),借入 int,借出 int)
insert into tb select 'A','A',8,0
insert into tb select 'A','A',0,2
insert into tb select 'A','A',0,1
insert into tb select 'B','B',3,0
insert into tb select 'B','C',0,4

select 供应商,isnull(sum(借入),0)-isnull(sum(借出),0) 余额
from tb
group by 供应商

drop table tb

/*
供应商 余额
---- -----------
A 5
B 3
C -4

(所影响的行数为 3 行)
*/

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧