我在sql中有一个查询:
SELECT * FROM table
并且查询的输出是:
4 casa perro
89 apartment mula
12 casa gato
31 roor mouse
43 apartment zorro
19 roor sapo
.
.
.
在第二列中,每个元素有2行,我有2行casa,2行有公寓,2行有roor,...
我需要一个向我展示seim元素的查询。
例如输出:
4 perro 12 gato casa
89 mula 43 zorro apartment
31 mouse 19 sapo roor
答案 0 :(得分:1)
假设您正在使用MySql(此标记在您的问题中排在第一位)。
你在找这样的东西吗?
SELECT col1,
MIN(CASE WHEN rnum = 1 THEN id END) id1,
MIN(CASE WHEN rnum = 1 THEN col2 END) col21,
MIN(CASE WHEN rnum = 2 THEN id END) id2,
MIN(CASE WHEN rnum = 2 THEN col2 END) col22
FROM
(
SELECT t.*, @n := IF(@g = col1, @n + 1, 1) rnum, @g := col1
FROM Table1 t, (SELECT @n := 0) i
ORDER BY col1, id
) q
GROUP BY col1
示例输出:
| COL1 | ID1 | COL21 | ID2 | COL22 | ----------------------------------------- | apartment | 43 | zorro | 89 | mula | | casa | 4 | perro | 12 | gato | | roor | 19 | sapo | 31 | mouse |
这是 SQLFiddle 演示
现在,您可以采用不同的方法,将id
和col2
值与CONCAT()
和GROUP_CONCAT()
一起使用不同的分隔符打包到一列中(让我们称之为{{1} }})。然后在迭代结果集时在客户端上explode
。
details
示例输出:
| COL1 | DETAILS | -------------------------------- | apartment | 89|mula,43|zorro | | casa | 4|perro,12|gato | | roor | 31|mouse,19|sapo |
这是 SQLFiddle 演示