-1

表格1

P R E Value

X 1 10 1
Y 2 30 2
Z 3 CR 3
X 1 30 4

表2

P R E Value

X 1 CR 4 
Y 2 10 5
Y 3 CR 6
W 1 30 7

Query1 - 合并这两个表。我可以使用联合子句来实现这一点。

Query2 - 在合并表上选择所有记录,除了 P、R 和 E 组合的条目;有类似的记录,唯一不匹配的“E”为 30 和 10,然后忽略 E 为 30 的记录。如果只存在 30,则考虑它。

条件:

  • 10 & 30 - 只考虑 10,忽略 30
  • 10 - 考虑一下
  • 30-考虑一下
  • CR - 考虑一下
  • 10 & CR - 同时考虑
  • 30 & CR - 同时考虑
  • 10 & 30 & CR - 考虑 10 & CR

预期输出表

P R E Value

X 1 10 1
Z 3 CR 3
X 1 CR 4 
Y 2 10 5
Y 3 CR 6
W 1 30 7

忽略的记录

Y 2 30 2
X 1 30 4
4

1 回答 1

0

我能够通过以下查询实现您想要的结果集。

  insert into #Table1
  values ('X','1','10','1'),
         ('Y','2','30','2'),
         ('Z','3','CR','3'),
         ('X','1','30','4')

  insert into #Table2
  values ('X','1','CR','4'),
         ('Y','2','10','5'),
         ('Y','3','CR','6'),
         ('W','1','30','7')


  --Query2
  select * from(
  --Query1
  select * from #Table1 union select * from #Table2) x
  where E != '30' OR 
  (
     E = '30' AND P+':'+R NOT IN 
    (
       --Modified Query1
       select P+':'+R from #Table1 where E = '10' 
       union 
       select P+':'+R  from #Table2 y where E = '10'
     )
   )
   order by Value
于 2013-11-29T22:51:50.223 回答