1

我有以下表结构

+-------+------------+-----------+---------------+
| id    |assigned_to | status    |  group_id     |              
+-------+------------+-----------+---------------+
| 1     | 1001       | 1         |    19         |
+-------+------------+-----------+---------------+
| 2     | 1001       | 2         |    19         |
+-------+------------+-----------+---------------+
| 3     | 1001       | 1         |    18         |
+-------+------------+-----------+---------------+
| 4     | 1002       | 2         |    19         |
+-------+------------+-----------+---------------+
| 5     | 1002       | 2         |    19         |
+-------+------------+-----------+---------------+

我想获取以下格式的信息

+-------+------------+-----------+
|       |   1001     |   1002    |          
+-------+------------+-----------+
| 1     |    1       |    0      |   
+-------+------------+-----------+
| 2     |    1       |    2      |   
+-------+------------+-----------+

所以基本上我希望使用分配给字段作为列名。然后行代表状态。因此,例如在表中,我们有两行,其中用户 1002 的状态为 2,因此总和显示在该特定状态行上。

请注意,group_id必须是 19。因此,为什么我在我的桌子上遗漏了 id 为 3 的行。

有人可以指出我正确的方向。我确定这种类型的查询有一个名称,但我一辈子都无法用语言表达出来。我尝试了各种其他查询,但没有一个能接近这个。

4

2 回答 2

1

您可能想阅读这篇文章http://www.artfulsoftware.com/infotree/qrytip.php?id=523

我会是这样的

SELECT 
  assigned_to, 
  COUNT( CASE assigned_to WHEN '1001' THEN 1 ELSE 0 END ) AS '1001', 
  COUNT( CASE assigned_to WHEN '1002' THEN 1 ELSE 0 END ) AS '1002'
FROM table
WHERE group_by = 19
GROUP BY assigned_to WITH ROLLUP; 

或类似的东西(我没有测试过这段代码..)

在文章中,他使用SUM()您必须这样做COUNT()并为 group_id 添加 WHERE 约束

希望这可以帮助

于 2013-10-24T15:24:52.103 回答
1

Marc B 是对的,除非您做出一些假设,例如假设 assign_to 的值在某种程度上是固定的,否则无法旋转表格 - 即将字段的内容转换为列。

另一方面,这是可以通过程序解决的问题。这不是一个简单的程序,但它可以完成这项工作。

我最近在java中做了一个类似的程序,如果你有兴趣我可以在这里发布它的核心。

于 2013-10-24T15:28:23.413 回答