什么是我的Sql Server查询?

时间:2013-11-14 06:58:34

标签: sql-server database sql-server-2008 sql-server-2008-r2 relational-database

表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 - 合并这两个表。我可以使用union子句实现这一点。

查询2 - 在合并表上选择除P,R&组合的条目以外的所有记录。 Ë;有类似的记录,唯一不匹配的'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

1 个答案:

答案 0 :(得分: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