将表连接到自身,结果为一行

时间:2014-01-26 07:22:56

标签: sql sql-server tsql

我正试图从制造系统中获取一些信息,这些信息跟踪组装设备时使用的部件。所有数据都在同一个表,设备,模块和组件中。设备由模块和组件组成,两者都注册为组件(ASSY),序列号为。 COMP列用于注册哪些组件进入模块,以及哪些组件和模块进入设备。 INVENTORY_ID列跟踪哪个模块进入哪个设备。

基本表结构如下:

SERIALNO ASSY ASSYREV COMP  COMPREV ORDERNO  ASSEMBLED_DATE_TIME     INVENTORY_ID  COMP_SERIALNUMBER
======== ==== ======= ====  ======= =======  ======================= ============= ==================
499222   M1   V005    C1    F       NULL     2013-11-14 04:08:46.000 NULL          50879
499223   M1   V005    C1    F       NULL     2013-11-14 04:11:30.000 NULL          50947
499224   M1   V002    C1    B       NULL     2013-11-14 04:13:58.000 NULL          50939
502270   D1   A       M1    V005    20532642 2013-11-15 09:10:47.000 499222        NULL
502277   D2   A       M1    V002    20532641 2013-11-15 08:59:49.000 499224        NULL
502479   D3   A       M1    V005    20532647 2013-11-15 09:32:15.000 499223        NULL
502270   D1   A       C2    F       20532642 2013-11-15 09:10:47.000 NULL          43542
502270   D1   A       M2    V011    20532642 2013-11-15 09:10:00.000 498644        NULL

所以,我的问题是,我需要获得有关COMPREV F组件C1已组装到哪些设备(通过模块)的信息。结果应如下所示。这可以通过一个查询完成吗?

SERIALNO ASSY COMP COMPREV ORDERNO  ASSEMBLED_DATE_TIME      COMP_SERIALNO
======== ==== ==== ======= ======== ======================== =============
502270   D1   C1   F       20532642 2013-11-15 09:10:47.000  50879   
502479   D3   C1   F       20532647 2013-11-15 09:32:15.000  50947    

1 个答案:

答案 0 :(得分:0)

如果我理解正确的问题,我相信这就是你想要的:

select  t2.SERIALNO, t2.ASSY, t1.COMP, t1.COMPREV, t2.ORDERNO, t2.ASSEMBLED_DATE_TIME, COMP_SERIALNO = t1.SERIALNO
from    bigtable t1
join    bigtable t2 on t1.ASSY = t2.COMP and t1.SERIAL_NO = INVENTORY_ID
where   t1.COMP = 'C1'
and     t1.COMPREV = 'F'

我不确定COMP_SERIALNO列,因为您列出的值与主表中的任何内容都不对应。