我有以下表结构
+-------+------------+-----------+---------------+
| 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的行。
有人能指出我正确的方向吗?我确定这种类型的查询有一个名称,但我不能为我的生活把它写成文字。我尝试了其他各种查询,但是没有一个能够接近这个问题。
答案 0 :(得分: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约束
希望这有帮助
答案 1 :(得分:1)
Marc B是对的,没有办法转动表-i.e.将字段的内容转换为列 - 除非你做出一些假设,比如认为assigned_to的值有些固定。
另一方面,这是程序可以解决的问题。这不是一个简单的程序,但它可以完成这项工作。
我最近在java中创建了一个与此类似的程序,如果你感兴趣我可以在这里发布它的核心。