0

我有这两张桌子:

表 A

ID 类型 SDATE EDATE 评级

1 M 2010 年 1 月 1 日 2011 年 1 月 1 日
1 M 2010 年 1 月 3 日 2011 年 1 月 4 日 B
2 A 2010 年 7 月 2 日 2015 年 1 月 31 日 C
3 M 2011 年 3 月 1 日 2012 年 1 月 20 日 B
4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 B
5 M 2009 年 3 月 1 日 2009 年 3 月 1 日
6 M 2006 年 12 月 31 日 9999 年 12 月 31 日
7 A 2006 年 1 月 1 日 9999 年 12 月 31 日 B

表 B

ID 类型 SDATE EDATE 评级

1 M 2010 年 1 月 1 日 2011 年 1 月 1 日
2 A 2010 年 7 月 2 日 2015 年 1 月 31 日 C
2 A 2010 年 9 月 2 日 2015 年 1 月 31 日 C
3 M 2011 年 3 月 1 日 2012 年 1 月 20 日 B
4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 C
6 M 2006 年 12 月 31 日 2015 年 12 月 31 日
7 A 2006 年 2 月 1 日 9999 年 12 月 31 日 B
8 M 2010 年 1 月 2 日 2012 年 1 月 2 日    

当我执行表 A 减去表 B 时,它会得到下一个结果:

ID 类型 SDATE EDATE 评级

1 M 2010 年 1 月 3 日 2011 年 1 月 4 日 B
4 A 2011 年 3 月 1 日 2012 年 1 月 20 日 B
5 M 2009 年 3 月 1 日 2009 年 3 月 1 日
6 M 2006 年 12 月 31 日 9999 年 12 月 31 日
7 A 2006 年 1 月 1 日 9999 年 12 月 31 日 B

我已经确定了 A.id 不在 B.id 中的情况,但是如何检查它何时在其他列中有所不同?

我不允许在模式上创建任何东西,所以我必须通过查询来完成。

到目前为止,这就是我所拥有的,但它给了我不正确的数据。



    with aminusb as
    (
        select
            *
        from A
        minus
        select
            *
        from B
    )
    select
        diff.*
    from
        aminusb diff
        ,B
    where
        diff.id = B.id
        and
            diff.start_date = B.start_date
        and
            diff.end_date = B.end_date
        and
            diff.rating <> B.rating


你知道我怎么能得到不同的场景吗?

  • 当一切都相等但,评级。
  • 当一切都一样,但是,结束日期。
  • 当没有什么是相等的但是,它具有相同的 id。

我需要获取满足每个场景的记录列表,以便人们可以详细检查它。

谢谢。

4

1 回答 1

1

这将给出不常见的行:

 Select startdate, enddate, rating 
   from TableA 
Intersect 
 Select startdate, enddate, rating 
   from TableB

显示所有记录:

 Select TableA.startdate, TableA.enddate, TableA.rating
  from TableA 
UNION 
 Select startdate, enddate, rating 
 from TableB

情况1:

 Select TableA.*, TableB.* 
   from tableA,TableB 
  Where TableA.StartDate = tableB.StartDate  
    And tableA.Enddate=TableB.Enddate 
    And TableA.Rating <>TableB.Rating

和 TableA.Rating = TableB.Rating

案例二:

 Select TableA.*, TableB.*
   from tableA,TableB 
  Where TableA.StartDate = tableB.StartDate 
    And tableA.Enddate<>TableB.Enddate
    And TableA.Rating = TableB.Rating

案例3:

 Select TableA.*, TableB.* 
   from tableA,TableB 
  Where TableA.StartDate <> tableB.StartDate 
    And tableA.Enddate<>TableB.Enddate 
    And TableA.Rating <>TableB.Rating
    And TableA.ID =TableB.ID
于 2012-06-11T03:49:46.157 回答