我有一个SQL Server表,其中包含以下字段和示例数据:
ID Name Address Age
23052-PF Peter Timbuktu 25
23052-D1 Jane Paris 22
23052-D2 David London 24
23050-PF Sam Beijing 22
23051-PF Nancy NYC 26
23051-D1 Carson Cali 22
23056-PF Grace LA 28
23056-D1 Smith Boston 23
23056-D2 Mark Adelaide 26
23056-D3 Hose Mexico 25
23056-D4 Mandy Victoria 24
每个带-PF的ID在表格中都是唯一的。
带-Dx的每个ID与-PF的相同ID相关。
带-PF的每个ID可以包含0个或更多带-Dx的ID。
给定-PF的最大-Dx行数为9.
即。 ID 11111-PF可以有11111-D1,11111-D2,11111-D3到11111-D9。
上述样本数据的预期输出:
ID ID (without suffix) PF_Name PF_Address PF_Age D_Name D_Address D_Age
23052-PF 23052 Peter Timbuktu 25 Jane Paris 22
23052-PF 23052 Peter Timbuktu 25 David London 24
23050-PF 23050 Sam Beijing 22 NULL NULL NULL
23051-PF 23051 Nancy NYC 26 Carson Cali 22
23056-PF 23056 Grace LA 28 Smith Boston 23
23056-PF 23056 Grace LA 28 Mark Adelaide 26
23056-PF 23056 Grace LA 28 Hose Mexico 25
23056-PF 23056 Grace LA 28 Mandy Victoria 24
我需要能够像上面一样加入-PF和-Dx。
如果-PF有0个Dx行,则输出中的D_Name,D_Address和D_Age列应返回NULL。
如果-PF有一个或多个Dx行,则PF_Name,PF_Address和PF_Age应对输出中的每一行重复,而D_Name,D_Address和D_Age应包含每个相关Dx行的值。
需要使用MSSQL。
查询不应使用视图或创建其他表。
感谢您的帮助!
答案 0 :(得分:1)
select
pf.ID,
pf.IDNum,
pf.Name as PF_Name,
pf.Address as PF_Address,
pf.Age as PF_Age,
dx.Name as D_Name,
dx.Address as D_Address,
dx.Age as D_Age
from
(
select
ID, left(ID, 5) as IDNum, Name, Address, Age
from
mytable
where
right(ID, 3) = '-PF'
) pf
left outer join
(
select
ID, left(ID, 5) as IDNum, Name, Address, Age
from
mytable
where
right(ID, 3) != '-PF'
) dx
on pf.IDNum = dx.IDNum
SqlFiddle演示:http://sqlfiddle.com/#!6/dfdbb/1
答案 1 :(得分:0)
SELECT t1.ID, LEFT(t1.ID,5) "ID (without Suffix)",
t1.Name "PF_Name", t1.Address "PF_Address", t1.Age "PF_Age",
t2.Name "D_Name", t2.Address "D_Address", t2.Age "D_Age"
FROM PFTable t1
LEFT JOIN PFTable t2 on LEFT(t1.ID,5) = LEFT(t2.ID,5)
WHERE RIGHT(t1.ID,2) = 'PF'