繁体   English   中英

合并表格SQL Server 2005

[英]Combining tables SQL Server 2005

  • 表1:LocID,Prod_ID,Metric_ID,Metric_Data
  • 表2:LocID,Metric_ID,Metric_Data

我需要一个结果表为:

  • 地点编号
  • 产品ID
  • Metric_ID
  • 满足以下条件的Metric_Data:

    1. 当Metric_ID匹配时,将添加Metric_Data
    2. 当Metric_ID不匹配时,将显示相关的Metric_Data(表示具有值的那个)
    3. 请注意,表1和表2中仅存在一些常见的Metric_ID。

您如何生成此第三张表? 我尝试了各种连接-完整,左,右等。

编辑

select
    A.LocID,
    A.Prod_ID,
    B.Metric_ID,
    coalesce(C.Metric_Data + D.Metric_Data, C.Metric_Data, D.Metric_Data) Metric_Data
from (
    select LocID, Prod_ID from table1 group by LocID, Prod_ID) A
inner join (
    select LocID, Metric_ID from table1 group by LocID
    union
    select LocID, Metric_ID from table2 group by LocID) B on A.LocID = B.LocID
left join table1 C on C.LocID = A.LocID and C.Prod_ID = A.Prod_ID and C.Metric_ID = B.Metric_ID
left join table2 D on D.LocID = A.LocID and D.Metric_ID = B.Metric_ID

笔记:

  • 答:产生所有位置和ProdID组合
  • B:针对每个位置,从两个表中生成所有可能的MetricID
  • C和D:左联接到数据表以获取Metric数据
  • 合并:返回C + D,或者如果其中一个为null,则返回另一个

select
    coalesce(a.LocID, b.LocID) LocID,
    a.Prod_ID,
    coalesce(a.Metric_ID, b.Metric_ID) Metric_ID,
    coalesce(a.Metric_Data + b.Metric_Data, a.Metric_Data, b.Metric_Data) Metric_Data
from table1 a
full outer join table2 b
    on a.LocID = b.LocID and a.Metric_ID = b.Metric_ID

假设

  1. 您通过元组(LocID,Metric_ID)进行匹配
  2. A或B可能没有另一个(LocID,Metric_ID)
  3. Metric_Data的结果为A + B(如果两者都存在),或者为(LocID,Metric_ID)组合仅存在一个,则为A或B

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM