#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 также есть много ответов по этому вопросу.