按班次类型计算物品数量

时间:2013-10-14 02:39:44

标签: sql ms-access

我很难得到一个标准的查询来完成它的工作......我确定我错过了一些愚蠢的东西。

我有一个包含两列用于此查询的表 - 该表称为“调用”,我使用的两个字段是“shiftID”和“type”。 (类型是查找字段,将包含2个固定值中的1个)

我需要进行的查询就是计算每个移位id是两个固定值出现的次数 - 所以结果看起来像这样:

| shiftID | Type1 | Type2 |
---------------------------
| 131011  |   5   |   2   |
---------------------------
| 131012  |   7   |   6   |
---------------------------
| 131013  |   1   |   3   |
---------------------------

任何帮助将不胜感激 - 谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:通过shiftId从调用组中选择shiftId,sum(type1),sum(type2) 如果我误解了你的问题,请评论......

答案 1 :(得分:0)

以下是达到预期结果的方法。

假设这样的数据集:

ShiftID  Type
-------  -----------
131011   fixedvalue1
131012   fixedvalue1
131013   fixedvalue2
...      ...

你可以先用这种方式进行转换:

SELECT
  ShiftID,
  IIF(Type = 'fixedvalue1', 1, 0) AS Type1,
  IIF(Type = 'fixedvalue2', 1, 0) AS Type2
FROM calls

这会给你以下行集:

ShiftID  Type1  Type2
-------  -----  -----
131011   1      0
131012   1      0
131013   0      1
...      ...    ...

对于每个ShiftID,现在有两列,Type1Type2,其中一列为1,另一列为0。如果您按ShiftID对此结果集进行分组并汇总(SUM)两列,您将获得每ShiftID个两种固定类型的计数:

SELECT
  ShiftID,
  SUM(IIF(Type = 'fixedvalue1', 1, 0)) AS Type1,
  SUM(IIF(Type = 'fixedvalue2', 1, 0)) AS Type2
FROM calls
GROUP BY ShiftID