这有点难解释,所以我来解释
这是db表的一个示例

    Table - Items
-----------------------
| name | key  | value |
-----------------------
| n1   | k1   |  12   |
-----------------------
| n1   | k2   |  32   |
-----------------------
| n1   | k3   |  22   |
-----------------------
| n2   | k1   |  56   |
-----------------------
| n2   | k2   |  34   |
-----------------------
| n2   | k3   |  11   |
-----------------------

数据库表被简化以保持文章简短,我不能改变数据库的设置方式(这会使我的生活更轻松,但我不能)
我需要数据循环显示,如下所示,其中与“键”关联的“值”在表中。
| Name   |   k1   |  k2  | k3   |
---------------------------------
|  n1    |   12   |  32  | 22   |
---------------------------------
|  n2    |   56   |  34  | 11   |
---------------------------------

我试过的那张桌子
<table id="example" class="display">
  <thead>
    <tr>
      <th>Name</th>
      <th>k1</th>
      <th>k2</th>
      <th>k3</th>
    </tr>
  </thead>
  <tbody>

  <%  @items.each do |item| %>
    <tr>
                           <td><%= item.name %></td>
    <% if item.key == 'k1' %> <td><%= item.value %></td> <% end %>
    <% if item.key == 'k2' %> <td><%= item.value %></td> <% end %>
    <% if item.key == 'k3' %> <td><%= item.value %></td> <% end %>

    </tr>
  <% end %>
  </tbody>
</table>

但这只在第一个item.value列中运行,k2和k3列为空。
有什么方法或东西可以帮到你吗?我相信有一个更有效和更简单的方法来做这件事,但我找不到或想不起来。

最佳答案

您正在尝试在Items表上执行轴心操作。尝试使用以下查询。这将以您需要的格式返回数据,使您不必在HTML层中进行复杂的操作。

SELECT name,
       SUM(CASE WHEN key = 'k1' THEN value ELSE 0 END) AS k1,
       SUM(CASE WHEN key = 'k2' THEN value ELSE 0 END) AS k2,
       SUM(CASE WHEN key = 'k3' THEN value ELSE 0 END) AS k3
FROM Items
GROUP BY name

以下是根据您提供的新信息所需的实际查询:
SELECT table_storing_name.name,
       SUM(CASE WHEN items.key = 'k1' THEN items.value ELSE 0 END) AS k1,
       SUM(CASE WHEN items.key = 'k2' THEN items.value ELSE 0 END) AS k2,
       SUM(CASE WHEN items.key = 'k3' THEN items.value ELSE 0 END) AS k3
FROM "table_storing_name" INNER JOIN "items"
    ON "items"."table_storing_name_id" = "table_storing_name"."id"
WHERE "table_storing_name"."category_id" = 5
GROUP BY table_storing_name.name

07-25 20:31