【问题标题】:What would be my SqlServer query?我的 SqlServer 查询是什么?
【发布时间】:2013-11-14 06:58:34
【问题描述】:

表 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

【问题讨论】:

  • 请不要将您的整个问题格式化为代码!已编辑。
  • 使用排除子句、Where子句。没有成功。
  • @SirCrispalot 谢谢。我正在学习这些技巧。

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


【解决方案1】:

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

  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2018-09-26
    相关资源
    最近更新 更多