1

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

  • 表 A:
Order_Date   Order_Amt   Order_Cnt
06/01/13        50.00        2
06/02/13        30.00        1
  • 表 B:
Waiver_Date   Waiver_Amt   Waiver_Cnt
06/01/13        25.00        1
06/05/13        15.00        1

クエリ構文で次の結果を生成したいだけです(同じ日付のレコードを1つの行にマージし、一致しない行をnullプレースホルダーで保持します):

  • クエリ結果:
Report_Date   Order_Amt   Order_Cnt     Waiver_Amt     Waiver_Cnt
06/01/13        50.00        2             25.00          1
06/02/13        30.00        1              null         null
06/05/13        null        null           15.00          1

Order_date と Waiver_date を 1 つの Report_date にマージする方法について、私は空白を描いています。これは、そこにいる誰かにとって非常に簡単なことだと確信しています!

前もって感謝します!K.

4

3 に答える 3

2

これは完全な外部結合のように見えます。両方のテーブルで結合列の名前が同じである場合、「Order_date と Waiver_date を 1 つの Report_date にマージする」という質問の部分は単純に消えます。

SELECT Report_date, Order_amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
  FROM tableA FULL OUTER JOIN tableB USING (Report_date)

On列の名前が異なるため、 -syntaxが必要で、両方の列をたとえば とマージしCOALESCEます。

SELECT COALESCE(Order_date, Waiver_date) AS Report_Date, Order_amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
  FROM tableA FULL OUTER JOIN tableB ON tableA.Order_Date = tableB.Waiver_Date

ここで、SQL ダイアレクトに完全外部結合がない場合は、左外部結合と右外部結合の和集合を使用してモデル化できます。

SELECT order_date AS Report_Date, Order_amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
  FROM tableA LEFT OUTER JOIN tableB ON tableA.Order_Date = tableB.Waiver_Date
UNION 
SELECT Waiver_date AS Report_Date, Order_amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
  FROM tableA RIGHT OUTER JOIN tableB ON tableA.Order_Date = tableB.Waiver_Date
于 2013-06-13T21:33:13.257 に答える
1

MySQL を使用しているとします。s を使用JOINして、列を共通の値と組み合わせることができます。

SELECT Order_Date AS Report_Date, Order_Amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
FROM A LEFT JOIN B ON Order_Date = Waiver_Date
  UNION
SELECT Order_Date AS Report_Date, Order_Amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
FROM A RIGHT JOIN B ON Order_Date = Waiver_Date;

ここでデモをチェックアウトしてください。

データベースが完全外部結合 (PostgreSQL など) をサポートしている場合は、次の方法も機能します。

SELECT Order_Date AS Report_Date, Order_Amt, Order_Cnt, Waiver_Amt, Waiver_Cnt
FROM A OUTER JOIN B ON Order_Date = Waiver_Date;
于 2013-06-13T19:19:16.930 に答える
0

Sql Server でテーブル構造を複製しましたが、これは機能しているようです:

SELECT IsNull(A.Order_Date, B.Waiver_Date) AS Report_Date, Order_Amt, Order_Cnt,  Waiver_Amt, Waiver_Cnt
FROM B
RIGHT JOIN A ON A.Order_Date=B.Waiver_Date
UNION
SELECT IsNull(A.Order_Date, B.Waiver_Date) AS Report_Date, Order_Amt, Order_Cnt,  Waiver_Amt, Waiver_Cnt
FROM A
RIGHT JOIN B ON A.Order_Date=B.Waiver_Date
于 2013-06-13T19:20:07.903 に答える