2013-04-05 18 views
1

我有一個表需要通過同一個表內的其他響應進行過濾。我使用下面的腳本,但是當有'Customer.customer_id'(有時候會有)重複時,結果會出現偏差。我的問題是,是否有更好的方法來重寫此代碼以避免這種情況,因此它只從「客戶」表中選擇不同的結果?通過初始調查響應篩選器響應

因爲有重複的條目下面的示例表應該只返回「兩個的迴應CUSTOMER_ID「10」(下面的基於查詢)

樣品表:

[res_id] [question_id] [customer_id] [survey_id] [res_answer] 
    1   20    10   155   male 
    1   20    11   155   male 
    1   20    10   155   male 
    1   20    12   155   female 

當前查詢:

SELECT 
    Responses.res_id AS responseID 
    ,Responses.res_col AS answer 
    ,Responses.res_created AS dateCreated 
    ,Responses.res_notes AS note 
    ,Responses.question_id AS questionID 
    ,Responses.customer_id AS customerID 
    ,Responses.res_answer AS subQuestion 
    ,Responses.survey_id AS surveyID 
    ,Responses.res_void AS void 
    ,Customer.res_answer AS filter 
FROM 
    Responses, Responses AS Customer 
WHERE 
    rs.customer_id = Customer.customer_id 
AND 
    Responses.survey_id ='155' 
AND 
    Customer.survey_id = '155' 
AND 
    Responses.question_id = '20'      

AND CAST(Customer.res_answer AS VARCHAR(500)) = 'male' 
AND Responses.res_void = '0' 
+0

請編輯您的問題標籤以包括您正在使用的dbms和版本 – 2013-04-05 15:15:39

+0

@AaronKurtzhals [tag:tsql]使它變得很明顯。 – Kermit 2013-04-05 15:19:05

+1

**(1)**我是否有權假定您的平臺是MS SQL Server? **(2)**在你的樣本中,我不明白你爲什麼認爲它應該是** 2 **行。不應該是** 3 **行? **(3)**您正在執行'LEFT JOIN',然後使用您的'WHERE rs.customer_id = Customer.customer_id'將其有效轉換爲'INNER JOIN'。是否有一個原因? – 2013-04-05 15:19:36

回答

0

鮮明如果沒有2005年那麼GROUP BY

支持
SELECT Distinct 
    Responses.res_id AS responseID 
    ,Responses.res_col AS answer 
    ,Responses.res_created AS dateCreated 
    ,Responses.res_notes AS note 
    ,Responses.question_id AS questionID 
    ,Responses.customer_id AS customerID 
    ,Responses.res_answer AS subQuestion 
    ,Responses.survey_id AS surveyID 
    ,Responses.res_void AS void 
    ,'male' 
FROM Responses 
WHERE Responses.survey_id ='155' 
    AND Responses.question_id = '20' 
    AND Responses.res_void = '0'     
    AND exists (select 1 from Responses c 
       where c.res_answer = 'male' 
       and c.survey_id = '155' 
       and c.ID = Responses.ID) 
+0

由於存在一些可能具有多個響應的問題,因此不確定分組方式是否是一種選項,因此當對主響應表檢查Customer.customer_id時,原始帖子中的查詢會下降。 – demeee 2013-04-05 16:40:13

+0

當前查詢是否有效?是什麼讓你覺得集團不是和選擇?這就是爲什麼Customer.customer_id被刪除。 – Paparazzi 2013-04-05 16:52:12

+0

是的,當前的查詢只適用於當你有一個重複的數據的情況,如上面所有'男性'的理貨表中的數據,他們的反應將返回3而不是2的理貨。我們有一個調查周圍50個不同類型的回答問題,我們通常按性別或年齡組篩選總回答(每個問題有多個回答) – demeee 2013-04-12 10:51:08