3

我有两列的表:名称和等级。它看起来像这样:

姓名 | 年级
亚当 | 1
亚当 | 2
亚当 | 2
亚当 | 3
弗兰克 | 2
弗兰克 | 1

现在我想创建如下所示的视图:

姓名 | 1 级 | 2 级 | 3 级
亚当 | 1 | 2 | 1
弗兰克 | 1 | 1 | 0

我写过这个:

选择名称,
    (选择计数(等级)
    来自 dbo.Rodzaj
    WHERE Grade = '1') 作为 Grade_1,  
    (选择计数(等级)
    来自 dbo.Rodzaj
    WHERE Grade = '2) as Grade_2,  
    (选择计数(等级)
    来自 dbo.Rodzaj
    WHERE Grade = '3') as Grade_3
来自 dbo.Rodzaj
按名称分组

但它不起作用......我会很感激任何帮助

4

1 回答 1

3

您要查找的内容称为“数据透视表”,它是通过一系列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

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

于 2012-06-25T12:24:47.293 回答