SQL Server多表连接和更新值

时间:2016-06-12 18:54:00

标签: sql sql-server

我在MS SQL中有3个表,我想加入:

表1:

CFG   Part  Commodity
---------------------
CFG1  PN1    Com1
CFG1  PN2    Com1
CFG1  PN3    Com1
CFG2  PN4    Com2

表2:

Part   Site     Product
-----------------------
PN1    Site1     Prod1
PN1    Site1     Prod2
PN1    Site2     Prod1
PN4    Site1     Prod1

表3:

Product  Family  LOB
--------------------
Prod1    Fam1    LOB1
Prod2    Fam2    LOB1

我使用以下查询来连接这3个表: -

select distinct b.CFG, a.Part, b.Commodity, a.Site,   c.Family, 
c.LOB, c.Product 
from Table_2 a, Table_1 b, Table_3 c
where b.Part = a.Part and c.Product = a.Product

这是我得到的结果: -

CFG     Part    Commodity   Site    Family  LOB     Product
-----------------------------------------------------------
CFG1    PN1     Com1        Site1   Fam1    LOB1    Prod1
CFG1    PN1     Com1        Site1   Fam2    LOB2    Prod2
CFG1    PN1     Com1        Site2   Fam1    LOB1    Prod1
CFG2    PN4     Com2        Site1   Fam1    LOB1    Prod1

这一切都很好但是该部分应该将所有值转换回CFG以及该CFG下的所有其他部分。例如,PN1的值应转换为CFG1,然后转换为PN2和PN3。这就是我希望看到的结果: -

 CFG        Part    Commodity   Site    Family  LOB     Product
-----------------------------------------------------------
CFG1    PN1     Com1        Site1   Fam1    LOB1    Prod1
CFG1    PN2     Com1        Site1   Fam1    LOB1    Prod1
CFG1    PN3     Com1        Site1   Fam1    LOB1    Prod1
CFG1    PN1     Com1        Site1   Fam2    LOB2    Prod2
CFG1    PN2     Com1        Site1   Fam2    LOB2    Prod2
CFG1    PN3     Com1        Site1   Fam2    LOB2    Prod2
CFG1    PN1     Com1        Site2   Fam1    LOB1    Prod1
CFG1    PN2     Com1        Site2   Fam1    LOB1    Prod1
CFG1    PN3     Com1        Site2   Fam1    LOB1    Prod1
CFG2    PN4     Com2        Site1   Fam1    LOB1    Prod1

花了很多时间思考如何做到最后寻求你的帮助。

1 个答案:

答案 0 :(得分:0)

这很疯狂,但试试这个:

SELECT DISTINCT a.CFG, a.Part, a.Commodity, b.Site
    , c.Family, c.LOB, c.Product 
FROM Table_1 as a
CROSS JOIN Table_2 as b 
INNER JOIN Table_3 as c ON c.Product = b.Product
WHERE b.Part in (SELECT Part FROM Table_1 as t WHERE t.CFG = a.CFG)
ORDER BY a.CFG, c.Family, b.Site