I have two tables, keywords and data.
Table keywords have 2 columns (id, keyword), table data have 3 columns (id[foreign key of keywords.id], name, value).
I am using this query:
SELECT k.id, d.value, d.name FROM keywords AS k INNER JOIN data as d ON k.id = d.id
it returns something like:
1 123 name1 1 456 name2 2 943 name1 3 542 name1 3 532 name2 3 682 name3
Each id can have values from 0 to 3 (maybe more in the future).
How can I retrieve all the rows with the same id in the same row?
Like
1 123 456 2 943 3 542 532 682
I want to do this because I want to be able to sort the values.
You can concatenate rows into single string using COALESCE method. This COALESCE method can be used in SQL Server version 2008 and higher. All you have to do is, declare a varchar variable and inside the coalesce, concat the variable with comma and the column, then assign the COALESCE to the variable.
Use GROUP_CONCAT()
like this:
SELECT k.id, GROUP_CONCAT(d.value) FROM keywords AS k INNER JOIN data as d ON k.id = d.id GROUP BY k.id
Also, you may need to do ORDER BY d.name
to get exact order of values as you want. Like this:
SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') FROM keywords AS k INNER JOIN data as d ON k.id = d.id GROUP BY k.id
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With