【问题标题】:How to merge or join data which have the same data with SQL如何使用 SQL 合并或连接具有相同数据的数据
【发布时间】:2014-07-16 05:18:56
【问题描述】:

如何将具有相同信息的数据合并或连接到一行,如下图。

SQL:

SELECT C.[LocationCode]
    ,C.[PartNumber]
    ,C.[WorksOrderNumber]
    ,CONVERT(DECIMAL(18,0), C.[BatchQuantity]) AS 'MAC_Outstanding'
FROM CUSTOMER_MN C
WHERE C.[LocationCode] = 'P1'

SELECT R.[LocationCode]
    ,R.[PartNumber]
    ,R.[WorksOrderNumber]
    ,CONVERT(DECIMAL(18,0), R.[PlannedQuantity] - R.[ActualQuantity]) AS 'ASY_Outstanding'
FROM CUSTOMER_RH R
WHERE R.[LocationCode] = 'P1'

【问题讨论】:

    标签: sql sql-server merge


    【解决方案1】:

    为什么不使用join

    SELECT C.[LocationCode]
        ,C.[PartNumber]
        ,C.[WorksOrderNumber]
        ,CONVERT(DECIMAL(18,0), C.[BatchQuantity]) AS 'MAC_Outstanding'
        ,CONVERT(DECIMAL(18,0), R.[PlannedQuantity] - R.[ActualQuantity]) AS 'ASY_Outstanding'
    FROM CUSTOMER_MN C
    JOIN CUSTOMER_RH R ON C.LocationCode = R.LocationCode AND C.Partnumber = R.Partnumber AND C.WorksOrderNumber = R.WorksOrderNumber
    WHERE C.[LocationCode] = 'P1'
    

    【讨论】:

      【解决方案2】:

      为了合并数据使用UNION ALL:

      SELECT C.[LocationCode]
          ,C.[PartNumber]
          ,C.[WorksOrderNumber]
          ,CONVERT(DECIMAL(18,0), C.[BatchQuantity]) AS 'MAC_Outstanding'
      FROM CUSTOMER_MN C
      WHERE C.[LocationCode] = 'P1'
      
      UNION ALL
      
      SELECT R.[LocationCode]
          ,R.[PartNumber]
          ,R.[WorksOrderNumber]
          ,CONVERT(DECIMAL(18,0), R.[PlannedQuantity] - R.[ActualQuantity]) AS 'ASY_Outstanding'
      FROM CUSTOMER_RH R
      WHERE R.[LocationCode] = 'P1'
      

      为了合并数据,请使用以下查询:

      Select * 
      From (
          SELECT C.[LocationCode]
              ,C.[PartNumber]
              ,C.[WorksOrderNumber]
              ,CONVERT(DECIMAL(18,0), C.[BatchQuantity]) AS 'MAC_Outstanding'
          FROM CUSTOMER_MN C
          WHERE C.[LocationCode] = 'P1')z1
      
      Left Join (
          SELECT R.[LocationCode]
              ,R.[PartNumber]
              ,R.[WorksOrderNumber]
              ,CONVERT(DECIMAL(18,0), R.[PlannedQuantity] - R.[ActualQuantity]) AS 'ASY_Outstanding'
          FROM CUSTOMER_RH R
          WHERE R.[LocationCode] = 'P1'
          )z2 On Z1.LocationCode = Z2.LocationCode, Z1.PartNumber = Z2.PartNumber and Z1.WorkOrderNumber = z2.WorkOrderNumber
      

      【讨论】:

        猜你喜欢
        • 2019-12-20
        • 2015-09-30
        • 1970-01-01
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多