java如何纵向读成横向

mmkkuoi 2011-05-16 03:35:52
有两张表

--设备表create table Tfacility
(
FfId int identity(1,1) primary key,
FfNo nvarchar(50) not null, --设备编码唯一的
)

--配件
create table Thardware
(
FhId int identity(1,1) primary key, --配件id
FhNo nvarchar(50) not null, --配件编码唯一
FxmName nvarchar(50) not null, --项目名如:内存
Fyjpz nvarchar(50), --配件配置内容如:金士顿2g DDR3
FfId int --设备id
)

--配件表关联设备(主要是配件组成主机),一台主机有多个配件
alter table Thardware
add constraint FK_FfId foreign key(FfId) references Tfacility(FfId)


insert into Tfacility values('pc-001');
insert into Tfacility values('pc-002');
insert into Tfacility values('pc-003');

insert into Thardware values('内存-001','内存','2g',1);
insert into Thardware values('cpu-001','cpu','i3',1);
insert into Thardware values('硬盘-001','硬盘','500g',1);

insert into Thardware values('cpu-002','cpu','i3',2);
insert into Thardware values('硬盘-002','硬盘','500g',2);
insert into Thardware values('内存-002','内存','2g',2);

insert into Thardware values('cpu-003','cpu','i3',3);
insert into Thardware values('内存-003','内存','2g',3);
insert into Thardware values('硬盘-003','硬盘','500g',3);

希望能读成

设备编码 内存 cpu 硬盘
pc-001 内存-001 cpu-001 硬盘-001
pc-002 内存-002 cpu-002 硬盘-002
pc-003 内存-003 cpu-003 硬盘-003

...全文
701 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
职业宅男 2011-05-19
  • 打赏
  • 举报
回复
楼主可以用这个sql试试,看看是不是你想要的效果
select tf.FfNo,t1.FhNo,t2.FhNo,t3.FhNo from Tfacility tf
left join Thardware t1 on tf.FfId=t1.Ffid and t1.FxmName='内存'
left join Thardware t2 on tf.FfId=t2.Ffid and t2.FxmName='cpu'
left join Thardware t3 on tf.FfId=t3.Ffid and t3.FxmName='硬盘'
mmkkuoi 2011-05-19
  • 打赏
  • 举报
回复
希望内存-001和内存-002在同一行
mmkkuoi 2011-05-19
  • 打赏
  • 举报
回复
如果我
insert into Thardware values('内存-001','内存','2g',1);
insert into Thardware values('cpu-001','cpu','i3',1);
insert into Thardware values('硬盘-001','硬盘','500g',1);

换成
insert into Thardware values('内存-001','内存','2g',1);
insert into Thardware values('内存-002','内存','2g',1);
insert into Thardware values('硬盘-001','硬盘','500g',1);
怎样读
loveofmylife 2011-05-16
  • 打赏
  • 举报
回复
给你一个oracle的实现你看下

SQL> select b.ffid,
2 b.ffno,
3 (select a.fhno
4 from Thardware a
5 where a.ffid = b.ffid
6 and a.fxmname = '内存') as 内存,
7 (select a.fhno
8 from Thardware a
9 where a.ffid = b.ffid
10 and a.fxmname = 'cpu') as cpu,
11 (select a.fhno
12 from Thardware a
13 where a.ffid = b.ffid
14 and a.fxmname = '硬盘') as 硬盘
15 from Tfacility b
16 ;

FFID FFNO 内存 CPU 硬盘
---------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
1 pc-001 内存-001 cpu-001 硬盘-001
2 pc-002 内存-002 cpu-002 硬盘-002
3 pc-003 内存-003 cpu-003 硬盘-003

SQL>
SQL> select ffno, wmsys.wm_concat(fhno)
2 from (select * from Thardware a, Tfacility b where a.ffid = b.ffid order by fxmname)
3 group by ffno
4 ;

FFNO WMSYS.WM_CONCAT(FHNO)
-------------------------------------------------- --------------------------------------------------------------------------------
pc-001 cpu-001,内存-001,硬盘-001
pc-002 cpu-002,内存-002,硬盘-002
pc-003 cpu-003,内存-003,硬盘-003

SQL>

evangelionxb 2011-05-16
  • 打赏
  • 举报
回复
去sql去看你的是什么数据库,
google下 query的行转列
mmkkuoi 2011-05-16
  • 打赏
  • 举报
回复
sql的
zn85600301 2011-05-16
  • 打赏
  • 举报
回复
什么数据库 oralce支持行列转化

MS 貌似要迭代 不过靠SQL是完全可以实现的
啊的发哦 2011-05-16
  • 打赏
  • 举报
回复
去SQL版问问
hpf112867284 2011-05-16
  • 打赏
  • 举报
回复
新建个新表 设备 - 配件的关联 表
{
FfNo nvarchar(50) not null, --设备编码唯一的
FhNo nvarchar(50) not null --配件编码唯一
}
不就可以了吗

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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