-2

我在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
4

1 回答 1

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 |
-----------------------------------------
| 公寓 | 43 | 佐罗 | 89 | 穆拉 |
| 家 | 4 | 佩罗 | 12 | 加图 |
| 屋顶 | 19 | 萨波 | 31 | 鼠标 |

这是SQLFiddle演示


现在,您可以采用不同的方法,使用不同的分隔符将 and 和值打包到idcol2列中(我们称之为)。然后在您迭代结果集时将其放在客户端上。CONCAT()GROUP_CONCAT()detailsexplode

SELECT col1, GROUP_CONCAT(CONCAT(id, '|', col2)) details
  FROM Table1
 GROUP BY col1

样本输出:

| COL1 | 详情 |
--------------------------------
| 公寓 | 89|穆拉,43|佐罗|
| 家 | 4|perro,12|加图 |
| 屋顶 | 31|鼠标,19|萨波 |

这是SQLFiddle演示

于 2013-07-31T03:05:46.563 回答