2017-04-04 24 views
0

我有一个表“工作”,其中列(JobID,时间,DrvNo ...)。 我得到了另一个表“JobDetails”(JobFK,PkSequence,IsDestination,PC)。 Jobs和JobDetails之间有一对多的关系。从另一个(一对多关系)INSERT到TABLE

Data in Jobs is as follows: 
Jobs 
================== 
JobID, Time, DrvNO 
================== 
1, 12:30, 123 
2, 13:50, 343 
3, 14:00, 234 

Data in JobDetails as follows: 
JobDetails 
============================================== 
JobFK, PkSequence, IsDestination, PC 
============================================== 
1, 0, 0, AB1 
1, 1, 1, DE1 
2, 0, 0, RT1 
2, 1, 0, DS1 
2, 2, 1, KJ1 
3, 0, 0, YU7 
3, 1, 1, TH1 

我所试图做的是在乔布斯将两列,并试图通过获得来自JobDetails的皮卡和目标来填充乔布斯这两个表合并;像下面这样:

Jobs 
================== 
JobID, Time, DrvNO, Pickup, Dropoff 
================== 
1, 12:30, 123, AB1, DE1 
2, 13:50, 343, RT1, KJ1 
3, 14:00, 234, YU7, TH1 

我所取得的这SELECT部分​​,具体如下:

SELECT cj.JobID, cj.Time,cj.DrvNo, j.PC AS Pickup, k.PC AS Dropoff 
FROM Jobs AS cj 
LEFT JOIN JobDetails AS j ON (cj.JobID = j.JobFK AND j.PKSequence = 0) 
LEFT JOIN JobDetails AS k ON (cj.JobID = k.JobFK AND k.IsDestination= 1) 

以上SELECT工作正常,但如何插入/更新现有的表(职位)与数据从这个查询?

任何帮助表示赞赏。 谢谢

+0

这行怎么样 - '2,1,0,DS1'?你想消除它? –

+0

是的,它被忽略。因为我们只对2件事感兴趣,所以PKSequence = 0(作为Pickup)或IsDestination = 1(作为Dropoff)。 – user1001493

回答

3

这里是SQL添加列,然后用你的select查询中的值更新它们(没有验证连接,因为你说他们正在为你想要的工作)。您可以根据需要更改新列的类型,只是基于您的给定数据进行猜测。

ALTER TABLE Jobs 
    ADD Pickup VARCHAR(3) 
     ,Dropoff VARCHAR(3) 
; 
GO 

UPDATE cj 
    SET cj.Pickup = j.PC 
     ,cj.Dropoff = k.PC 
FROM Jobs AS cj 
LEFT JOIN JobDetails AS j ON (cj.JobID = j.JobFK AND j.PKSequence = 0) 
LEFT JOIN JobDetails AS k ON (cj.JobID = k.JobFK AND k.IsDestination= 1) 
+0

感谢Anthony Hancock提供的解决方案。有用。欢呼声 – user1001493

+0

很高兴为你效劳。你能接受我的答案吗?谢谢。 –