Sql server 2012 从2个数据集中联接表

Sql server 2012 从2个数据集中联接表,sql-server-2012,Sql Server 2012,我有两个数据集: 一, 以下是第二个数据集: select dl.LocId, dl.ParamID, dl.alertNumExceed, dl.upperAlarm, dl.lowerAlarm, dl.alertOn, dl.EntryUserID, dl.ParamOrder from data_LocParams dl where LocId = 9604 此数据集的结果是 LocId ParamID alertNumExceed upperAlar

我有两个数据集:

一,

以下是第二个数据集:

    select dl.LocId, dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
此数据集的结果是

LocId   ParamID alertNumExceed  upperAlarm  lowerAlarm  alertOn EntryUserID ParamOrder
9604    187 NULL            NULL            NULL            0   NULL            NULL
9604    3057    NULL            NULL            NULL            0   NULL            NULL
9604    3138    NULL            NULL            NULL            0   NULL            NULL
我想要的最终结果是这样的:

LocId   ParamID alertNumExceed  upperAlarm  lowerAlarm  alertOn EntryUserID ParamOrder
9605    187 NULL            NULL            NULL            0   NULL            NULL
9605    3057    NULL            NULL            NULL            0   NULL            NULL
9605    3138    NULL            NULL            NULL            0   NULL            NULL
9606    187 NULL            NULL            NULL            0   NULL            NULL
9606    3057    NULL            NULL            NULL            0   NULL            NULL
9606    3138    NULL            NULL            NULL            0   NULL            NULL
注意对于每个LocId,它是如何基于ParamID重复的

WITH ResultSet1 AS (
  SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604
), ResultSet2 AS (
select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
)
  select
    ResultSet1.LocId, ResultSet2.*
  from ResultSet1
  cross join ResultSet2
在回答Nate的评论时,您可以使用插入:

WITH ResultSet1 AS (
  SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604
), ResultSet2 AS (
select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
)
  insert into yourTable
  select
    ResultSet1.LocId, ResultSet2.*
  from ResultSet1
  cross join ResultSet2
或者,您可以在不使用以下选项的情况下编写:

insert into yourTable
select
  ResultSet1.LocId, ResultSet2.*
  from (
      SELECT LocId 
        from map_Sites ms
        inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
        inner join map_Locations ml on mw.SysID = ml.SysID
        where ms.SiteId = 344 and LocId <> 9604
    ) as ResultSet1
  cross join (
    select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
        from data_LocParams dl where LocId = 9604
) as ResultSet2

谢谢你,史蒂夫。我需要根据结果将此信息插入表中。如何使用此查询执行此操作。在看到我的更新答案之前,我还没有使用过关键字,在这里我可以以可读和格式化的方式做出回应。
WITH ResultSet1 AS (
  SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604
), ResultSet2 AS (
select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
)
  insert into yourTable
  select
    ResultSet1.LocId, ResultSet2.*
  from ResultSet1
  cross join ResultSet2
insert into yourTable
select
  ResultSet1.LocId, ResultSet2.*
  from (
      SELECT LocId 
        from map_Sites ms
        inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
        inner join map_Locations ml on mw.SysID = ml.SysID
        where ms.SiteId = 344 and LocId <> 9604
    ) as ResultSet1
  cross join (
    select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
        from data_LocParams dl where LocId = 9604
) as ResultSet2