Реальный вопрос: знаете ли вы, сколько у вас значений для col2data?
канонический ответ использовать group_concat()
, чтобы получить значения:
select col1data, col3data, col4data, group_concat(col2data)
from t
group by col1data, col3data, col4data;
Это создает разделенный запятыми список. Вы можете получить фантазию и включить пробелы вместо запятых:
select col1data, col3data, col4data, group_concat(col2data separator ' ')
from t
group by col1data, col3data, col4data;
Но это все еще производит всего четыре столбца.
Если вы хотите отдельный столбец для каждого из и вы знаете номер, вы можете использовать трюк на group_concat()
:
select col1data, col3data, col4data,
substring_index(group_concat(col2data order by col2data), ',', 1),
substring_index(substring_index(group_concat(col2data order by col2data), ',', 2), ',', -1),
substring_index(substring_index(group_concat(col2data order by col2data), ',', 3), ',', -1),
from t
group by col1data, col3data, col4data;
Использование substring_index()
позволяет извлекать элементы из списка после они объединены вместе.
OK теперь, что если мои данные как то CREATE TABLE my_table ( col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR (255), COL4 VARCHAR (255) ); \t INSERT INTO my_table (col1, col2, COL3, COL4) ЗНАЧЕНИЯ ('а', 'col2data1', 'аа', 'ааа'), ('а', 'col2data2', 'аа' , 'aaa'), ('a', 'col2data3', 'aa', 'aaa'), ('b', 'col2data11', 'bb', 'bbb'), ('b', ' 'col2data22', 'bb', 'bbb'), ('b', 'col2data33', 'bb', 'bbb') ; представьте еще много строк. – Joseph
@ user2515601: Тогда указанный выше запрос вернет результат для каждой отдельной комбинации '(col1, col3, col4)'. – eggyal
Спасибо, хороший сэр! – Joseph