DBMNG数据库管理与应用

科学是实事求是的学问,来不得半点虚假。
当前位置:首页 > SQLServer > 应用案例

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

有位做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
本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号