+----+-----+------------+
|col1|col2 |col3 |
+----+-----+------------+
|A |one |1-jul-2013 |
|A |two |2-jul-2013 |
|A |three|3-jul-2013 |
|A |four |4-jul-2013 |
|A |five |5-jul-2013 |
|B |one |1-jul-2013 |
|B |two |2-jul-2013 |
|B |three|3-jul-2013 |
|B |four |4-jul-2013 |
|B |five |5-jul-2013 |
|B |six |6-jul-2013 |
|B |seven|7-jul-2013 |
|B |eight|8-jul-2013 |
|C |one |1-jul-2013 |
|C |two |2-jul-2013 |
|C |three|3-jul-2013 |
|C |four |4-jul-2013 |
|C |five |5-jul-2013 |
|D |one |1-jul-2013 |
|D |two |2-jul-2013 |
|D |three|3-jul-2013 |
|D |four |4-jul-2013 |
|D |five |5-jul-2013 |
+----+-----+------------+
我希望显示器看起来像这样:
+-----+------+------------+------------+------------+
|Group|Name |Date |Name |Date |
+-----+------+------------+------------+------------+
| A |one |1-jul-2013 |two |2-jul-2013 |
| B |one |1-jul-2013 |two |2-jul-2013 |
| C |one |1-jul-2013 |two |2-jul-2013 |
| D |one |1-jul-2013 |two |2-jul-2013 |
+-----+------+------------+------------+------------+
答案 0 :(得分:0)
你为什么要这样? 彼此相邻的列名使得有点难以找出您需要的列名。 据我所知,不可能有重复的列名。
答案 1 :(得分:0)
我假设您想要的是col1值的所有记录,而不是为每个值返回的特定列。
如果是这样,使用GROUP_CONCAT: -
SELECT col1, GROUP_CONCAT(CONCAT_WS('-', col2, col3) SEPARATOR ':')
FROM some_table
GROUP BY col1
如果您希望更容易处理它并且您的数据相当简单,您可以将返回的连接列构建为JSON编码数组(因此可以使用JSON_DECODE将其转换为数组以在PHP中处理): -
$sql = "SELECT col1, CONCAT('{\"', CONCAT('{\\\"', GROUP_CONCAT(CONCAT_WS('\\\":\\\"', col2, col3) SEPARATOR '\\\",\\\"') ,'\\\"}')
FROM some_table
GROUP BY col1";
如果你真的想要你所拥有的格式(忽略多个具有相同名称的列),那么你可以使用和IF来检查列值以决定是否返回另一个列值,并将聚合函数用于强制为该列返回一个值: -
SELECT col1,
'one',
MAX(IF(col2='one', col3, NULL)),
'two',
MAX(IF(col2='two', col3, NULL)),
'three',
MAX(IF(col2='three', col3, NULL)),
'four',
MAX(IF(col2='four', col3, NULL)),
'five',
MAX(IF(col2='five', col3, NULL)),
'six',
MAX(IF(col2='six', col3, NULL)),
'seven',
MAX(IF(col2='seven', col3, NULL)),
'eight',
MAX(IF(col2='eight', col3, NULL))
FROM some_table
GROUP BY col1