'Having an issue writing a functional sequelize query for case-when

I am trying to put this query for case when, but it's not working:

[db.Sequelize.literal('case when "survey_session_question->scq"."eng_question_text" is not null then "survey_session_question->scq"."eng_question_text" else "survey_session_question->scq->base_question"."eng_question_text" end'), 'eng_question_text']

I should be getting the values where the field eng_question_text is not null, but am still getting values where eng_question_test is null.

Could someone please point out why it's not working the way it should here?

EDIT: I edited the query but it's still not functioning properly, as in some null questions and null ids are coming in final output when it shouldn't.

Original query tht worked:

select case when scq.eng_question_text is not null then scq.eng_question_text 
                          else bcq.eng_question_text end as eng_question_text, 
                          ssa.answer_text as answer_comments, scq.id as survey_question_id
                          from survey_sessions ss
                          join survey_session_questions ssq on ssq.survey_session_id = ss.id
                          join survey_session_answers ssa on ssa.session_question_id = ssq.id
                          join survey_links sl on sl.id = ss.survey_link_id
                          join survey_custom_questions scq on scq.id = ssq.survey_question_id 
                          left join base_custom_questions bcq on bcq.id = scq.base_custom_question_id 
                          where ss.status_code = 'COMPLETE' and scq.survey_id = :surveyId
                          and ssa.answer_text is not null and ssa.answer_text != ''

My sequelize veersion-----

.findAll({
      attributes: [  
        [db.Sequelize.literal('"session_question->survey_session->survey_link->survey->client"."client_full_name"'), 'client_full_name'], 
        [db.Sequelize.literal('case when "session_question->scq"."eng_question_text" is not null then "session_question->scq"."eng_question_text" else "session_question->scq->base_question"."eng_question_text" end'), 'eng_question_text'],
        ['answer_text','answer_comments'],
        [db.Sequelize.literal('"session_question->scq"."id"'), 'survey_question_id']
      ],
      where:{
       [Op.and]: [
            {
              answer_text: { [Op.ne]: null }
            }
            , {
              answer_text: { [Op.ne]: '' }
            }
          ]
        }
       ,include: [
        {
          model: db.SurveySessionQuestion          
          , as: 'session_question'
          , attributes: []
          , include: 
          [
            {
              model: db.SurveySession             
              , as: 'survey_session'
              , attributes: []
              , where:{status_code:'COMPLETE'}
               , include:[
                  {
                    model: db.SurveyLink             
                    , as: 'survey_link'
                    , attributes: []
                    , include:
                    [
                      {
                        model: db.Survey             
                        , as: 'survey'
                        , attributes: []
                        , include:
                        [
                          {
                            model: db.Client             
                            , as: 'client'
                            , attributes: []
                          }
                        ]
                      }
                    ]
                  }
                ]
            },
            {
              model: db.SurveyCustomQuestion              
              , as: 'scq'
              , attributes: []
              , where: {
                survey_id: surveyId
              }
              , include:[
                {
                  model:db.BaseCustomQuestion
                  ,as:'base_question'
                  ,attributes: []
                }
              ]
            }
          ]
        }        
      ]
    });

Generated sql query-----

select
    "SurveySessionAnswer"."id",
    "session_question->survey_session->survey_link->survey->client"."client_full_name" as "client_full_name",
    case
        when "session_question->scq"."eng_question_text" is not null then "session_question->scq"."eng_question_text"
        else "session_question->scq->base_question"."eng_question_text"
    end as "eng_question_text",
    "SurveySessionAnswer"."answer_text" as "answer_comments",
    "session_question->scq"."id" as "survey_question_id"
from
    "survey_session_answers" as "SurveySessionAnswer"
left outer join ( "survey_session_questions" as "session_question"
inner join "survey_sessions" as "session_question->survey_session" on
    "session_question"."survey_session_id" = "session_question->survey_session"."id"
    and ("session_question->survey_session"."deletedAt" is null
        and "session_question->survey_session"."status_code" = 'COMPLETE')
left outer join "survey_links" as "session_question->survey_session->survey_link" on
    "session_question->survey_session"."survey_link_id" = "session_question->survey_session->survey_link"."id"
    and ("session_question->survey_session->survey_link"."deletedAt" is null)
left outer join "surveys" as "session_question->survey_session->survey_link->survey" on
    "session_question->survey_session->survey_link"."survey_id" = "session_question->survey_session->survey_link->survey"."id"
    and ("session_question->survey_session->survey_link->survey"."deletedAt" is null)
left outer join "clients" as "session_question->survey_session->survey_link->survey->client" on
    "session_question->survey_session->survey_link->survey"."client_id" = "session_question->survey_session->survey_link->survey->client"."id"
    and ("session_question->survey_session->survey_link->survey->client"."deletedAt" is null)
inner join "survey_custom_questions" as "session_question->scq" on
    "session_question"."survey_question_id" = "session_question->scq"."id"
    and ("session_question->scq"."deletedAt" is null
        and "session_question->scq"."survey_id" = '57d88936-eb2d-11eb-ae65-13e560ff06c2')
left outer join "base_custom_questions" as "session_question->scq->base_question" on
    "session_question->scq"."base_custom_question_id" = "session_question->scq->base_question"."id" ) on
    "SurveySessionAnswer"."session_question_id" = "session_question"."id"
    and ("session_question"."deletedAt" is null)
where
    ("SurveySessionAnswer"."deletedAt" is null
        and ("SurveySessionAnswer"."answer_text" is not null
            and "SurveySessionAnswer"."answer_text" != ''));```


Solution 1:[1]

so I found how to remove the null data from my results. I added the following line in model: db.SurveySessionQuestion: where:{survey_question_id:{[Op.ne]:null}}

This takes out the null values from the output, and the case when seems to be functioning as required after this.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Shom