在SQL中合并2个表数据

时间:2014-04-30 13:06:12

标签: asp.net sql-server-2008

我有3个数据表声明,部分和人工。

在此声明中是父表,而部分和人工是映射声明的表,他们有部分和人工将ClaimId作为外键。

声明包含以下数据:

enter image description here

部分有数据赞

enter image description here

人工表有数据赞

enter image description here

目标输出将是:

enter image description here

任何人都可以帮助我在SQL服务器中实现这一目标。

我试图用Union / CTE解决,但它没有按照我的意愿给出结果。

2 个答案:

答案 0 :(得分:1)

对于这种特定情况,我得到了相同的输出(针对更新的输出屏幕)。我不知道是否有其他数据对您有用。

    SELECT TMP.ClaimId
      , CASE WHEN TMP.RowNum = 1 THEN TMP.Name ELSE NULL END AS ClaimName
      , CASE WHEN TMP.RowNum = 1 THEN TMP.Note ELSE NULL END AS Note
      , TMP.PartId
      , TMP.PartNumber
      , TMP.PartCost
      , JOIN_L.LaborId
      , JOIN_L.LaborCost
    FROM (
      SELECT C.ClaimId, C.Name, C.Note, P.PartId, P.PartNumber, P.PartCost
      , ROW_NUMBER() OVER(PARTITION BY C.ClaimId ORDER BY P.PartId) AS RowNum
      FROM Claim AS C
      LEFT JOIN Part AS P ON C.ClaimId = P.ClaimId
    )AS TMP
    LEFT JOIN (
      SELECT *
      , ROW_NUMBER() OVER(PARTITION BY L.ClaimId ORDER BY L.ClaimId) AS RowNum
      FROM Labor AS L
    ) AS JOIN_L ON (TMP.ClaimId = JOIN_L.ClaimId AND TMP.RowNum = JOIN_L.RowNum)
    ORDER BY TMP.ClaimId

答案 1 :(得分:0)

不确定你为何尝试过CTE

   Select C.ClaimId,C.name,C.Note,P.PartId,P.PartNumber,P.PartCost,L.LabourId,L.LabourCost
   From Claim C
        Left Outer Join Part P On P.ClaimId = C.ClaimId
        Left Outer Join Labor L On L.ClaimId=C.ClaimId