2013-07-03 125 views
1

如何返回顯示0響應的行?此查詢返回4個ID中的3個和響應數量,但Id 3沒有顯示,因爲它有0個響應。我想它與0在sql查詢中返回0而不是任何內容

SELECT Count(sr.id) AS 'Responses', 
     qpa.possibleanswertext, 
     qpa.id 
FROM caresplusparticipantsurvey.questionpossibleanswer AS qpa 
     JOIN caresplusparticipantsurvey.surveyresponse AS sr 
     ON qpa.id = sr.questionpossibleanswerid 
WHERE (qpa.id BETWEEN 1 AND 4) 
     AND (sr.surveyid IN (SELECT surveyid 
          FROM caresplusparticipantsurvey.surveyresponse AS 
            sr 
          WHERE sr.questionpossibleanswerid = 138)) 
GROUP BY qpa.possibleanswertext, 
      qpa.id 

99 Very Useful           1 
    26 Somewhat useful           2 
    33 I did not complete this CORE requirement this year 4 

回答

4
顯示

更改joinleft join,將使用NULL的不匹配行:

left join CaresPlusParticipantSurvey.SurveyResponse ... 

您還需要將您的過濾器移至ON部分,因此刪除此:

and (sr.SurveyId in (select SurveyId from CaresPlusParticipantSurvey.SurveyResponse as  sr where sr.QuestionPossibleAnswerId = 138)) 

,改變你的加入到這一點:

left join CaresPlusParticipantSurvey.SurveyResponse AS sr 
    ON qpa.id = sr.questionpossibleanswerid 
    AND sr.SurveyId IS NULL OR sr.SurveyId in (
     select SurveyId 
     from CaresPlusParticipantSurvey.SurveyResponse as sr 
     where sr.QuestionPossibleAnswerId = 138 
    ) 
+0

我已經嘗試過,沒有工作 – user1202606

+2

@ user1202606:除了更改連接類型,移動條件對'sr.SurveyId'從「where」子句到「on」子句 – Andomar

+0

哦,是的,@ Andomar建議使用ON子句更好地說我的更改WHERE。 –

0
; with CTE as 
     (
     ... your query here ... 
     ) 
select * 
from CTE 
union all 
select 0 
,  null 
,  null 
where not exists 
     (
     select * 
     from CTE 
     ) 
+0

你的想法在上面的評論工作。你可以編輯這個來顯示on子句的改變,所以我可以接受這個嗎?再次感謝 – user1202606

+0

@ user1202606:我的評論只是Brendan Long的答案中的一小部分,所以請務必接受他的回答。 – Andomar