我有一张有两列的桌子:姓名和年级。看起来像这样:
名称等级
亚当1
亚当2
亚当2
亚当3
弗兰克2
弗兰克1
现在我要创建如下视图:
姓名一年级二年级三年级
亚当1 2 1
弗兰克1 1 0
我写过:
选择名称,
(选择计数(等级)
来自dbo.rodzaj
其中grade='1')为grade_1,
(选择计数(等级)
来自dbo.rodzaj
其中grade='2)为grade_2,
(选择计数(等级)
来自dbo.rodzaj
其中等级='3')为3级
来自dbo.rodzaj
按名称分组
但它不起作用…
我很感激你的帮助

最佳答案

您要寻找的是一个称为“pivot table”的表,它使用一系列CASE语句完成,这些语句对每个条件应用1或0,然后向上SUM()1和0以检索计数。

SELECT
  NAME,
  SUM(CASE WHEN GRADE = 1 THEN 1 ELSE 0 END) AS GRADE1,
  SUM(CASE WHEN GRADE = 2 THEN 1 ELSE 0 END) AS GRADE2,
  SUM(CASE WHEN GRADE = 3 THEN 1 ELSE 0 END) AS GRADE3
FROM Rodzaj
GROUP BY NAME

请注意,如果需要动态列数,则必须使用脚本语言和循环构造查询。(或存储过程中的循环)

关于mysql - 双人组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11189313/

10-12 13:31