2015-07-24 2 views
0

все. У меня очень похожий вопрос: this one. Я пытаюсь преобразовать строки в столбцы в результатах, но мне также нужно объединить несколько таблиц. Я начинаю понимать, как это сделать в одной таблице, но я понятия не имею, как использовать объединения для выполнения того же самого.Преобразование строк в столбцы в postgresql с объединениями

У меня есть 3 таблицы - тест, вопрос и ответ. У теста есть вопросы. У вопросов есть ответы. До сих пор довольно очевидно. Мне нужно вывести список вопросов и ответов для определенного теста, но я бы хотел, чтобы он был в определенном формате. (Я не установил их - это то, с чем мне нужно работать.)

Как я уже сказал, это очень похоже на другое сообщение о перемещении строк в столбцы, но я не был уверен, как включить присоединяется к нему.

Вот структура таблицы:

TEST 
---------- 
id 
task_id 
name 

QUESTION 
---------- 
id 
test_id 
text 
correctanswer_id 

ANSWER 
---------- 
id 
question_id 
text 

Вот что у меня есть сейчас, и что я получаю от него:

-- select all review questions for a specific video 
select t.id as "testid", q.id as "questionid", q.text as "questiontext", 
    a.id as "answerid", a.text as "answertext" 
from "Question" q 
    inner join "Answer" a on a.question_id = q.id 
    inner join "Test" t on t.id = q.test_id 
where t.test_id = 100 

+--------+------------+--------------+----------+------------+ 
| testid | questionid | questiontext | answerid | answertext | 
+--------+------------+--------------+----------+------------+ 
| 100 | 200  | 'Question 1' | 300  | 'Answer 1' | 
| 100 | 200  | 'Question 1' | 301  | 'Answer 2' | 
| 100 | 200  | 'Question 1' | 302  | 'Answer 3' | 
| 100 | 200  | 'Question 1' | 303  | 'Answer 4' | 
| 100 | 201  | 'Question 2' | 304  | 'Answer 1' | 
| 100 | 201  | 'Question 2' | 305  | 'Answer 2' | 
| 100 | 201  | 'Question 2' | 306  | 'Answer 3' | 
| 100 | 201  | 'Question 2' | 307  | 'Answer 4' | 
+--------+------------+--------------+----------+------------+ 

Вот что мне нужно вместо этого:

+--------+------------+--------------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+------------------+ 
| testid | questionid | questiontext | answerid1 | answertext1 | answerid2 | answertext2 | answerid3 | answertext3 | answerid4 | answertext4 | correctanswer_id | 
+--------+------------+--------------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+------------------+ 
| 100 | 200  | 'Question 1' | 300  | 'Answer 1' | 301  | 'Answer 2' | 302  | 'Answer 3' | 303  | 'Answer 4' | 301    | 
| 100 | 201  | 'Question 2' | 304  | 'Answer 1' | 305  | 'Answer 2' | 306  | 'Answer 3' | 307  | 'Answer 4' | 307    | 
+--------+------------+--------------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+------------------+ 

ответ

1

У вас попробовал использовать Case Statement в вашем запросе?

select t.id as "testid", q.id as "questionid", q.text as "questiontext", 
    a.id as "answerid", a.text as "answertext", CASE WHEN answertext= 'Answer 1' then answertext as answertext1 
from "Question" q 
    inner join "Answer" a on a.question_id = q.id 
    inner join "Test" t on t.id = q.test_id 
where t.test_id = 100 

Вот ссылка подробнее: http://www.postgresql.org/docs/7.4/static/functions-conditional.html

+0

Это не будет работать, потому что это серия тестовых вопросов и каждый вопрос имеет уникальные ответы ответа. Он должен быть полностью переменным. – bungee41

Смежные вопросы