使用count函数访问SQL以获取多个字段

时间:2014-10-13 14:33:11

标签: sql ms-access

全部。我的表看起来像

Team1 Team2   result
  a    b        win
  a    c        tie
  b    d        loss
  c    a        win
  d    c        win

我想输出team1结果统计信息,如

Team1  win  loss  tie
  a     4    2    1
  b    2     2    3

我可以使用

计算胜诉案例
SELECT TEAM1,Count(Result='win') as Win_Number
From GAMES
Where Result='win'
Group by TEAM1

但是我应该添加什么输出损失和平局?使用join?

更新:使用" iif sum"命令解决问题,请参阅XQbert的帖子。非常感谢。

1 个答案:

答案 0 :(得分:1)

这是一种方式......

我一直忘记案例在MSAccess中的内联选择中不起作用

所以这不起作用:

SELECT [Home team],
  sum(CASE WHEN result='win' THEN 1 else 0 END) as Win,
  sum(CASE WHEN result='loss' THEN 1 else 0 END) as Loss,
  sum(CASE WHEN result='tie' THEN 1 else 0 END) as Tie
FROM GAMES
GROUP BY [Home team]

但这可能:

SELECT  [Home team]
    sum(iif(result='win', 1,0)) as Win,
    sum(iif(result='loss', 1,0)) as Loss,
    sum(iif(result='tie', 1,0)) as Tie,
FROM GAMES
    GROUP BY [Home team]

这基本上表示评估由主队分组的表中的每个结果,如果结果是胜利,失败或平局,则将值设置为1,否则将值设置为0.然后,将给出给定主页的所有结果的SUM球队。因为每个结果要么是赢或输,所以1会出现在胜利,失败或平局中,但只有三个中的一个;如果结果不是胜利损失或平局,可能没有。虽然我支持我使用下面的交叉表查询声明。

所以数据看起来像......总和之前

Team1  win  loss  tie
  a     1    0    0
  a     1    0    0
  a     1    0    0
  a     1    0    0
  a     0    1    0
  a     0    1    0
  a     0    0    1
  b     1    0    0
  b     1    0    0
  b     0    1    0
  b     0    1    0
  b     0    0    1
  b     0    0    1
  b     0    0    1

然后总和会给你......

Team1  win  loss  tie
  a     4    2    1
  b     2    2    3

Access有一个很好的功能,称为交叉表查询。将查询类型更改为此并使用它。这是一个很好的功能,访问有许多大型数据库没有! IT允许您根据行的值(在您的情况下为结果)创建列,然后通过它进行聚合(计算给定团队的赢/输关系出现的次数)

实施例: https://support.office.com/en-us/article/Make-summary-data-easier-to-read-by-using-a-crosstab-query-8465b89c-2ff2-4cc8-ba60-2cd8484667e8

如何: http://office.microsoft.com/en-us/access-help/create-a-select-or-crosstab-query-mdb-HP005187965.aspx