2016-08-02 8 views
-1

私は、各人の一意の識別子によってリンクされた複数のテーブルにわたってデータを扱っています。論理関数を使用したSQL GROUP BY

イベントスタブと呼ばれるテーブルの1つにIDのリストが含まれているとします。そのIDにイベントが発生するたびに、そのIDの横にイベントがリストされます。イベントを「ポテトを買った」、「椅子を脱いだ」、「映画を見た」と呼ぶことにしましょう。

のでEventstabだから

ID | Event 
----------------------  
200 | fell off a chair 
200 | bought potato 
200 | fell off a chair 
500 | bought potato 

のように見えるあなたが見ることができるように、 - ID 200が椅子から落ちた、500はしませんでした。

このイベントスタブには、メインデータ内のIDのSUBSETのデータが含まれています。 IDがメインデータには表示されますが、Eventstabでは表示されない場合、IDは椅子から落ちることはありません。私は、彼らがこれまでの椅子をオフに下落しているかどうか、データセットの各人物のため、見つけることに興味があります

SELECT id, event 
FROM thedatums 
JOIN Eventstab ON id 
WHERE ... 

上記の情報は、のようなクエリを使用して回収することができます。 I.イベントの有無=そのIDの「椅子から落ちた」。

より具体的には、私は変数が欲しいと思います。id_EVERにEventstabの 'chairから落ちた'というレコードがある場合は、 'is_a_dimwit'を1と呼びます。

は、だから私の頭の中でそれが

SELECT 
    id, 
    CASE 
     WHEN event = 'fell off chair' THEN 1 
     ELSE 0 
    END AS 'is_a_dimwit' 
FROM 
    thedatums 
JOIN 
    Eventstab ON id 

EDITです:IDが複数で繰り返されるレコードがある私は、各IDがでユニークになりたい、しかし

「椅子から落ちました」私のデータセットと、この人が私が持っているデータの椅子から落ちたことがあるかどうかを測定する 'is_a_dimwit'変数です。

私の質問は二重です:どのように私はこれに潜在的な答えをgooglingに行くのですか?あなたはそれをどうやって解決しますか?

+3

を私は混乱しています。 。 。どのテーブルにどのデータがありますか?サンプルデータと望ましい結果は、あなたがしたいことを明確にするのに役立ちます。 –

+0

私は言い換えるとより具体的にしようとしました –

答えて

2

それはあなたがこのような何かしたいように聞こえる:

select i.id, 
     (case when exists (select 1 from thedatums where td.id = i.id and td.event = 'fell off chair') 
      then 1 
      when exists (select 1 from some_data where td.id = i.id and td.event = 'fell off chair') 
      then 1 
      else 0 
     end) as is_a_dimwit 
from ((select id from thedatums) 
     union -- on purpose to remove duplicates 
     (select id from some_data) 
    ) i; 
+0

ありがとう、私は存在する場合は気づいていなかった、これは問題について行く方法かもしれないと思う。 –