1

我有一个名为 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 行或附近的语法错误:(CASE WHENassessment_questions."order" = 1

样本数据

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
4

2 回答 2

1

您可以尝试正常使用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 |
于 2019-04-02T15:23:27.570 回答
0

这是做你想做的吗?

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;
于 2019-04-02T15:18:25.900 回答