2016-08-02 89 views
-1

我正在使用由每個人的唯一標識符鏈接的多個表的數據。具有邏輯功能的SQL GROUP BY

假設一個名爲Eventstab的表包含一個ID列表,並且每當該事件發生在該ID時,它就會列出該ID旁邊的事件。讓我們稱之爲「買土豆」,「從椅子上掉下來」,「看電影」。

所以Eventstab看起來

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

所以,你可以看到 - 編號200摔下椅子,500沒有。

此事件表包含主數據中ID的SUBSET的數據。我們可以得出結論,如果一個ID出現在主數據中,但沒有出現在Eventstab中,他們從不會從椅子上掉下來。

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

我感興趣的是找到,每個人的數據集,他們是否曾經跌落椅子:

以上信息可以像查詢恢復。 I.E是否事件='脫離主席'爲該ID。

更具體地說,我想要一個變量,我會打電話'is_a_dimwit',等於1,如果ID EVER在Eventstab中有一個'掉下椅子'的記錄,否則爲0。

所以,在我的腦海它

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

編輯:有,在那裏重複多的ID記錄「跌下椅子」

不過,我想每個ID是唯一我的數據集和這個'is_a_dimwit'變量來衡量這個人是否已經從我擁有的數據中脫離椅子。

我的問題是雙重的:我該如何去尋找一個可能的答案呢?更好,你會如何解決它?

+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

謝謝,我不知道存在的情況下,我認爲這可能是如何去解決這個問題。 –