0

我正在寻找一个查询,它会将我的几行返回到列中,但事先不知道行数。我已经搜索过,我发现的唯一解决方案涉及知道有多少行。

这是一个示例表:

parentID    colA       colB
2           aaaaaa     1000.00
2           bbbbbb     1500.00
3           cccccc     500.00
3           dddddd     700.00
3           eeeeee     2000.00

我需要它看起来像:

parentID    colA(n)      colB(n)     colA(n+1)     colB(n+1)     colA(n+2)     colB(n+2)
2           aaaaaaa      1000.00     bbbbbb        1500.00       NULL          NULL
3           cccccc       500.00      dddddd        700.00        eeeeee        2000.00

我意识到这应该在 PHP 中完成,但我需要它在 mysql 中用于我正在使用的第三方 excel 导出器插件。

编辑:如果我知道我需要的最大列数,有没有办法做到这一点?

4

1 回答 1

1

在不知道列数的情况下,您无法在 SQL 中进行查询。

SELECT 列表的列必须在解析查询时固定。您要求的是数据的状态(在查询执行之前不知道)决定了列数。这不是 SQL 的工作方式。

要完成数据透视类型的操作或数据确定列的任何查询,您有两种选择:

  • 执行预备查询以发现您想要获取多少不同的组,并使用它来构建具有匹配数量的列的查询。

  • 查询行中的所有数据,将其取回您的应用程序,然后在代码中的数据结构(即数组)中完全转换结果集。

无论哪种方式,您都需要在获取数据之前或之后编写应用程序代码。


回复您的评论:您是对的,这不是传统的支点,但相似之处在于数据驱动列数。也就是说,您需要的列数是最大组中行数的 2 倍。但它们不会全部被填满,因为每组的行数各不相同。您没有每组固定数量的行,因此您不能填充每组固定数量的列。

我真的建议您使用后一种策略:将数据作为行获取,因为它们存储在数据库中。然后在您的应用程序代码中对其进行后处理。当您从数据库中获取行时,循环遍历结果集并逐步构建您的数据结构。

例如,在 PHP 中:

while ($row = $stmt->fetch()) {
  $data[$row['parentID']][] = $row['colA'];
  $data[$row['parentID']][] = $row['colB'];
}
于 2012-11-20T19:38:28.457 回答