0

私はこの2つのテーブルを持っています:

表A

IDタイプ日付日付評価

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

表B

IDタイプ日付日付評価

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

テーブルAからテーブルBを引いたものを実行すると、次の結果が得られます。

IDタイプ日付日付評価

1M2010年1月3日2011年1月4日B
4A2011年3月1日2012年1月20日B
5 M 3/1/2009 3/1/2009 F
6 M 2006/12/31 12/31/9999 A
7 A2006年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

ケース2:

 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 に答える