私はこの2つのテーブルを持っています:
table1:
---------
UserID: Date: Day_status:
-----------------------------------
3004 2010-01-01 Normal
3004 2010-01-12 Normal
3004 2010-01-15 Ignore
3004 2010-01-18 Abnormal
4001 2010-01-09 Normal
4001 2010-01-11 Ignore
4001 2010-02-10 Normal
4001 2010-02-12 Abnormal
------------------------------------
table:2
-------
UserID: Date: Time Height
--------------------------------------------
3004 2010-01-01 08:01:02 35
3004 2010-01-01 09:01:12 32
3004 2010-01-01 18:01:02 40
3004 2010-01-02 07:01:02 20
3004 2010-01-02 08:01:02 30
3004 2010-01-02 10:01:02 10
3004 2010-01-08 07:01:02 20
3004 2010-01-08 08:01:02 30
3004 2010-01-08 10:01:02 10
3004 2010-01-12 07:01:02 30
3004 2010-01-12 09:01:02 50
3004 2010-01-12 18:01:02 30
3004 2010-01-15 07:01:02 30
3004 2010-01-15 09:01:02 50
3004 2010-01-15 18:01:02 30
3004 2010-01-18 07:01:02 30
3004 2010-01-18 09:01:02 50
3004 2010-01-18 18:01:02 30
4001 2010-01-08 07:01:02 30
4001 2010-01-08 08:01:02 30
4001 2010-01-08 09:01:02 40
4001 2010-01-08 13:01:02 30
4001 2010-01-09 07:01:02 30
4001 2010-01-09 08:01:02 30
4001 2010-01-09 09:01:02 40
4001 2010-01-11 08:01:02 30
4001 2010-01-11 09:01:02 30
4001 2010-01-11 18:01:02 30
4001 2010-01-12 08:01:02 30
4001 2010-01-12 09:01:02 30
4001 2010-01-12 18:01:02 30
4001 2010-01-13 08:01:02 30
4001 2010-01-13 09:01:02 30
4001 2010-01-13 18:01:02 30
4001 2010-02-12 08:01:02 30
4001 2010-02-12 09:01:02 30
4001 2010-02-12 09:01:02 30
-----------------------------------------------
table1 では、ユーザーは複数の「日付」を持つことができることに注意してください (ユーザー 3004 には複数の日付があります)。そして、表2では、
ユーザーは複数の「日付」を持つことができ、各日付は複数の「時間」を持つことができます。テーブル 2 では、ユーザー 3004 には、日付「2011-01-01」などの 3 つの異なる「時間」があります。
これら2つのテーブルを結合したいので、
1) table2 のすべてのデータと、table1 の Day_status データのみが結果に含まれます。
2) table1 の table2 の日付の「Day_status」がない場合、結果のその日付の Day_status は「通常」として表示されます (注: テーブル 2 には table1 よりも多くの日付エントリがあります)。
3) table1 の Day_status='Ignore' のエントリは、最終結果には含まれません。
出力は次のようになります。
UserID: Date: Time Height Day_status_val
---------------------------------------------------------------
3004 2010-01-01 08:01:02 35 Normal
3004 2010-01-01 09:01:12 32 Normal
3004 2010-01-01 18:01:02 40 Normal
3004 2010-01-02 07:01:02 20 Normal
3004 2010-01-02 08:01:02 30 Normal
3004 2010-01-02 10:01:02 10 Normal
3004 2010-01-08 07:01:02 20 Normal
3004 2010-01-08 08:01:02 30 Normal
3004 2010-01-08 10:01:02 10 Normal
3004 2010-01-12 07:01:02 30 Normal
3004 2010-01-12 09:01:02 50 Normal
3004 2010-01-12 18:01:02 30 Normal
3004 2010-01-18 07:01:02 30 Abnormal
3004 2010-01-18 09:01:02 50 Abnormal
3004 2010-01-18 18:01:02 30 Abnormal
4001 2010-01-08 07:01:02 30 Normal
4001 2010-01-08 08:01:02 30 Normal
4001 2010-01-08 09:01:02 40 Normal
4001 2010-01-08 13:01:02 30 Normal
4001 2010-01-09 07:01:02 30 Normal
4001 2010-01-09 08:01:02 30 Normal
4001 2010-01-09 09:01:02 40 Normal
4001 2010-01-12 08:01:02 30 Normal
4001 2010-01-12 09:01:02 30 Normal
4001 2010-01-12 18:01:02 30 Normal
4001 2010-01-13 08:01:02 30 Normal
4001 2010-01-13 09:01:02 30 Normal
4001 2010-01-13 18:01:02 30 Normal
4001 2010-02-12 08:01:02 30 Abnormal
4001 2010-02-12 09:01:02 30 Abnormal
4001 2010-02-12 09:01:02 30 Abnormal
-----------------------------------------------
結果を取得するために次のクエリを使用しました。
SELECT table2.UserID, table2.Date, table2.Time, table2.Height,
CASE
when table1.Day_status='Abnormal Day' then 'Abnormal Day'
when table1.Day_status='Normal Day' then 'Normal Day'
else 'Normal Day'
END as Day_status_val
FROM table2 LEFT JOIN table1
ON table2.UserID = table1.UserID and table1.Day_status !='Ignore'
しかし、それは誤った結果をもたらします。誰でもこれに関して私を助けてくれませんか。table1 と table2 のデータと目的の出力を見てください。