| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 296 人关注过本帖
标题:SQL一个表的结果是另一个表的条件
只看楼主 收藏
chhui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-1-12
  问题点数:0  回复次数:4   
SQL一个表的结果是另一个表的条件
有A,B两个表
A表数据            B表数据
编号  名称  日期 编号  数量
a        啤酒   05-01   a      12
b        香烟   05-01   b       2
c        火柴   05-02   a       5
d        饮料   05-02   c       8
                      05-03  c        8

现在想要得到这样一张表
 日期    编号     数量     名称           05-01    a          12        啤酒
05-01    b          2         香烟
小计                   14
05-02    a           5         啤酒05-02    c           8         火柴
小计                  13            
05-03     c          8         火柴
小计                   8
总计                  35
现在用with rollup得到的结果在编号列的空处里有null,而编号列又是名称列的条件,所以造成生成的数据不正常,求大神解决
2018-01-15 23:23
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:71
帖 子:2337
专家分:5592
注 册:2015-3-25
  得分:0 
楼主,原来的问题是这样吧..
有A,B两个表
A表数据
 编号  名称
 a     啤酒
 b     香烟
 c     火柴
 d     饮料
           
B表数据
 日期  编号  数量
 05-01 a      12
 05-01 b       2
 05-02 a       5
 05-02 c       8
 05-03 c       8

现在想要得到这样一张表

 日期   编号   数量    名称
 05-01   a     12       啤酒
 05-01   b      2       香烟
 小计          14
 05-02   a     5        啤酒
 05-02   c     8        火柴
 小计          13            
 05-03   c     8        火柴
 小计          8
 总计          35

现在用with rollup得到的结果在编号列的空处里有null,而编号列又是名称列的条件,所以造成生成的数据不正常,求大神解决
2018-01-16 09:21
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:71
帖 子:2337
专家分:5592
注 册:2015-3-25
  得分:0 
/*
-- 测试数据,SQL2000通过测试
-- 有A,B两个表
-- A表数据
create table #表a(编号 varchar(4),名称 varchar(20))
insert into #表a
select 'a','啤酒' union all
select 'b','香烟' union all
select 'c','火柴' union all
select 'd','饮料'
           
-- B表数据
create table #表b(日期 varchar(5),编号 varchar(4),数量 int)
insert into #表b
select '05-01','a',12 union all
select '05-01','b',2 union all
select '05-02','a',5 union all
select '05-02','c',8 union all
select '05-03','c',8
*/

declare @Id int,@MaxId int,@日期 varchar(5)

if object_id('tempdb..#表c')is not null
drop table #表c
create table #表c(ID INT IDENTITY(1,1),日期 varchar(5))

if object_id('tempdb..#表d')is not null
drop table #表d
create table #表d(日期 varchar(5),编号 varchar(4),数量 int ,名称 varchar(20))

insert into #表c(日期)
select 日期 from #表b group by 日期
set @MaxId=@@rowcount

-- select * from #表a
-- select * from #表b
-- select * from #表c

select @Id=1,@日期=''
while @Id <=@MaxId
begin
 select @Id=ID,@日期=日期 from #表c where ID=@id
 
 insert into #表d
  select 日期,b.编号,数量,名称 from #表b as b
  left join #表a as a on a.编号=b.编号
  where 日期=@日期
 union all
  select '小计','',sum(数量),'' from #表b where 日期=@日期

 set @Id=@Id+1
end

if @MaxId >0
insert into #表d
  select '总计','',sum(数量),'' from #表b

select * from #表d

[此贴子已经被作者于2018-1-16 10:43编辑过]

2018-01-16 09:31
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:71
帖 子:2337
专家分:5592
注 册:2015-3-25
  得分:0 
附件: 您没有浏览附件的权限,请 登录注册
2018-01-16 10:49
chhui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-1-12
  得分:0 
虽然用其他方法得到了解决,但是还是非常感谢mywisdom88的详细解答
2018-01-16 19:58







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086567 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved