SELECT语句如何写,关于子表记录合并

jesons 2007-12-25 12:25:38
父表a:
编号

子表b:
编号 货物名称 件数 毛重 体积


父表10条记录。子表35条记录。

现在要求结果是父表的所有记录,且每条记录都要显示对应子表的字段。
常规是:

select a.编号.b.货物名称,件数,毛重,体积 from a left join b on b.编号 = a.编号

但这样出来的结果有35条记录。因为子表有35条记录。

我现在要求出来的结果是父表的记录即10条记录。实现的方法就是把每个编号对应的子表内容分行合并在一起保存在一条记录中。
这个函数怎么写??
下图是需要的结果3条记录。:




...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-12-25
  • 打赏
  • 举报
回复
举个例子:

create table T(ID int)
insert T select 1
insert T select 2
insert T select 3

go
create table T2(ID int,num int)
insert T2 select 1,2
insert T2 select 1,3
insert T2 select 2,4
insert T2 select 2,5


select
t.ID,
num=isnull(rtrim(t2.num),''),
row=identity(int,1,1)
into #
from
t
left join
t2 on t.ID=t2.ID


select
[ID]=case when row=(select min(row) from # where ID=a.ID) then rtrim(ID) else '' end,
num
from
# a



ID num
------------ ------------
1 2
3
2 4
5
3

(所影响的行数为 5 行)


中国风 2007-12-25
  • 打赏
  • 举报
回复
生成临时表。。.
jesons 2007-12-25
  • 打赏
  • 举报
回复
2楼理解错了。

我1楼图的结果是这样的:

记录只有3条,货物名称,件数,毛重,体积,并非汇总,而是编号对应子表的明细,并在一起放在一条记录中。

其实这个结果中,字段 货物名称,件数,毛重,体积 已不再是之前的类型了,结果都是 VARCHAR 或TEXT 。
-狙击手- 2007-12-25
  • 打赏
  • 举报
回复
select   a.编号,b.货物名称,sum(件数),sum(毛重),sum(体积)    
from a left join b on b.编号 = a.编号
group by a.编号,b.货物名称
JL99000 2007-12-25
  • 打赏
  • 举报
回复
楼主
你说的那种应该是在页面上来实现的
SQL中要把多个记录合并为一条可以,但想要把每个子记录都显示为一行比较困难

完全应该是页面上控件来实现
jesons 2007-12-25
  • 打赏
  • 举报
回复
怎么是5行啊???

就你的实例,我要的结果应该是3行

34,594

社区成员

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

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