Разбить один столбец на несколько столбцов

#mysql

#mysql

Вопрос:

В настоящее время я пытаюсь выполнить запрос для нашего программного обеспечения для управления проектами (это школьный проект).

У меня есть следующая таблица:

  projectID     |    cID          |    value
---------------|-------------------------
1              |     3           |     321
1              |     4           |     442
2              |     3           |     999
2              |     4           |     799
  

И конечный продукт должен выглядеть так:

       c1       |     c2
---------------|-----------------
      321      |     442
      999      |     799
  

Теперь проблема в том, что может быть бесконечное количество c1, c2 и т.д. и бесконечное количество проектов. Таким образом, таблица станет довольно большой (в обоих направлениях).

Есть ли способ позволить столбцам объявлять «себя»? Если нет, допустим, я ограничиваю количество c1, c2, .. до 5, как я могу это сделать? Я попробовал что-то вроде:

 select v1.value, v2.value from value v1, value v2
  

Ответ №1:

Я считаю, что использование условной агрегации должно дать вам сводный результат:

 select
  max(case when cid = 3 then value end) as c1,
  max(case when cid = 4 then value end) as c2,
  ...
from yourtable
group by projectid
  

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

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

1. Итак, вы имеете в виду, что я должен подготовить строку «динамически» в java, я понимаю. Но это означало бы, что я должен сначала получить все cid из таблицы, а затем вставить их динамически.

2. Я имею в виду, что все может быть сделано в рамках процедуры MySQL. Здесь нет необходимости в Java. Погуглите. Динамический запрос MySQL. На SO также есть много ответов по этому вопросу.