Как я могу разделить один столбец на несколько столбцов в зависимости от их значения при его выборе? - PullRequest
1 голос
/ 02 апреля 2019

У меня есть таблица с именем assignment_answers, которая имеет следующие атрибуты: assignment_answers_id, question_id и order .Порядок является атрибутом, который может принимать значение от 0 до 9. Я хотел бы, чтобы каждое значение, которое может быть использовано, чтобы оно отображалось в другом столбце.Например, когда ордер имеет значение 0, я хочу, чтобы он отображался в столбце с именем number0 .Когда оно имеет значение 1, я хочу, чтобы оно отображалось в столбце с именем number1 .

Может ли кто-нибудь помочь мне с этим?До сих пор я пробовал это, но это не работает:

SELECT (CASE WHEN assessment_answers.order = 0 
             THEN(
              select aq.order as number0
              from assessment_answers)
              END)
       (CASE WHEN assessment_answers.order = 1 
             THEN(
              select aq.order as number1
              from assessment_answers)
              END)
FROM assessment_answers

Я получаю сообщение об ошибке: ОШИБКА: синтаксическая ошибка в или около "(" ЛИНИЯ 6: (СЛУЧАЙ, КОГДА ОЦЕНОЧНЫЕ ВОПРОСЫ. "Order" = 1

SAMPLE DATA

assignment_answers_id     question_id    order
 1                            1           0
 2                            1           0
 3                            2           1

желаемый вывод:

assignment_answers_id     question_id    order0  order1
 1                            1           0       null
 2                            1           0       null
 3                            2           null     1

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Можно попробовать использовать обычный CASE WHEN

Запрос 1 :

SELECT assignment_answers_id,
       question_id,
       (CASE WHEN order = 0 THEN order END) order0,
       (CASE WHEN order = 1 THEN order END) order1
FROM assessment_answers

Результаты :

| assignment_answers_id | question_id | order0 | order1 |
|-----------------------|-------------|--------|--------|
|                     1 |           1 |      0 | (null) |
|                     2 |           1 |      0 | (null) |
|                     3 |           2 | (null) |      1 |
0 голосов
/ 02 апреля 2019

Делает ли это то, что вы хотите?

select (aa.order = 0)::int as order_0, 
       (aa.order = 1)::int as order_1, 
       (aa.order = 2)::int as order_2, 
       . . .
from  assessment_answers aa;
...