欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

在sql语句中实现数据的主从显示

创建时间:2013年03月26日 16:52  阅读次数:(8193)
分享到:
今天有位做erp的朋友在群中问,怎么在sql中实现数据的主从显示呢?具体的就是如果数据的主表信息与上条数据的主表信息相同,就把该条数据的主表信息清空,这样看来起数据的从属关系就很明显了。如下图:
如果原始数据是这样的:


需实现的效果就是这样的:


自己想了一个比较简单的思路,如下:
先创建示例表并填充数据:
create table #a
(
ID int,
name varchar(50),
address varchar(50),
sort decimal(18,4)
)

insert into #a(ID,name,address,sort)
select 1,'张','上海',20
union all
select 2,'张','上海',30
union all
select 3,'张','上海',40
union all
select 4,'李','深圳',40
union all
select 5,'李','深圳',40

可利用sql"select * from #a"查看结果如下:


然后创建另一个表,用来存储结果集
create table #b
(
ID int,
name varchar(50),
address varchar(50),
sort decimal(18,4),
PID int
)

在这个表中我增加了PID列,因为结果表中的主表信息会被清空,所以我们需要借助PID列来确定数据的从属关系。

先将所有主表信息添加进#b表中,因为是主表的信息,所以我们初始化PID列的值为0:
insert into #b(ID,name,address,sort,PID)
select *,0 from #a t1
where id=(select min(id) from #a t2 where t1.name=t2.name and t1.address=t2.address)

然后将其它的从表数据添加到#b中,记得要将主表的ID值填到从表的PID列了。
insert into #b(ID,name,address,sort,PID)
select t1.ID,'','',t1.Sort,t2.ID from #a t1,#b t2
where t1.name=t2.name and t1.address=t2.address and t1.id<>t2.id

到这里,其实我们的数据已经添加进#b表了,只是还未能按正确的顺序来显示,如下图:


我们还需要给数据正确的排序:
update #b set PID=ID where pid=0
select * from #b order by pid asc,id asc

这样,我们就完成想要的功能了,最后结果如下图:


最后记的删除临时表哦
drop table #a
drop table #b
7
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 78+15=? 的结果(结果是:93)
结  果: