Пытается получить значение столбца, чтобы возвращать только столбец, на который он ссылается, в той же таблице в sql

#sql #sql-server

#sql #sql-server

Вопрос:

Значения в AnswerInt — это числа от 1 до 5. Число соответствует LabelText номеру столбца.

Я хочу, чтобы возвращался столбец, AnswerInt а затем только столбец, на который LabelText он ссылается.

 SELECT
    Question,
    AnswerInt,
    AnswerText,
    CreatedTime,
    LabelText1,
    LabelText2,
    LabelText3,
    LabelText4,
    LabelText5,
    SurveyType,
    ResponseTypeDesc,

FROM
    dbo.WEBSITE_SURVEYS

WHERE
    CASE AnswerInt 
        WHEN '1' THEN 'LabelText1'
        WHEN '2' THEN 'LabelText2'
        WHEN '3' THEN 'LabelText3'
        WHEN '4' THEN 'LabelText4'
        WHEN '5' THEN 'LabelText5'
  

Ответ №1:

Поскольку у вас есть число для определения возвращаемого значения, которое относится к столбцу, вы могли бы использовать CHOOSE здесь; что фактически является сокращенным CASE выражением:

 SELECT Question,
       AnswerInt,
       AnswerText,
       CreatedTime,
       SurveyType,
       ResponseTypeDesc,
       CHOOSE(AnswerInt, LabelText1, LabelText2, LabelText3, LabelText4, LabelText5) AS LabelText
FROM dbo.WEBSITE_SURVEYS;
  

Ответ №2:

Вы имели в виду поместить CASE выражение в SELECT предложение?

 SELECT
    Question,
    AnswerInt,
    AnswerText,
    CreatedTime,
    SurveyType,
    ResponseTypeDesc,
    CASE AnswerInt
        WHEN '1' THEN LabelText1
        WHEN '2' THEN LabelText2
        WHEN '3' THEN LabelText3
        WHEN '4' THEN LabelText4
        WHEN '5' THEN LabelText5
    END AS LabelText

FROM
    dbo.WEBSITE_SURVEYS
  

Комментарии:

1. Да, но я новичок в этом и погуглил это. Это неправильно?

Ответ №3:

Если число в столбце AnswerInt совпадает с номером LabelText столбца, попробуйте выполнить этот простой запрос:

 select 
    Question,
    AnswerInt,
    AnswerText,
    CreatedTime,
    SurveyType,
    ResponseTypeDesc,
    CONCAT('LabelText', AnswerInt)LabelText
FROM
    dbo.WEBSITE_SURVEYS