SQL查询 - mod函数 - 如何使用它来对结果进行分组?

时间:2013-03-27 00:26:46

标签: sql

如果这是一个简单的问题,那么我很想知道如此道歉。请注意,此问题与Microsoft Query有关,因为我将结果提取到报告中。

我目前有一个包含多个列的表,包括一列是1到6之间的整数值。我试图根据列中的值是偶数还是奇数来对此列进行分组。根据我的知识,我不知道如何实现这一点(关于我为什么要这样做的一些背景:我使用的表与时间表条目有关,移位栏我指的是白班的奇数值,甚至晚上的值转移)。如果有人可以提供帮助,那就太好了。目前,我有以下代码:

SELECT 
   PRTH.PostDate, HRRM.LastName, HRRM.FirstName, 
   Sum(PRTH.Hours) AS 'Sum of Hours', 
   (PRTH.Shift Mod 2) As 'Night Shift'
FROM 
   Viewpoint.dbo.HRRM HRRM, Viewpoint.dbo.PRTH PRTH
WHERE 
   PRTH.Employee = HRRM.PREmp AND PRTH.JCCo = HRRM.PRCo
GROUP BY 
   PRTH.PostDate, HRRM.LastName, HRRM.FirstName, Night Shift

我遇到问题的是Mod函数,因为我不知道如何定义它,以及如何在group by by函数中使用它。

提前致谢

1 个答案:

答案 0 :(得分:3)

听起来这就是你要找的东西 - 使用%运算符来执行Mod:

select a % 2, sum(b)
from yourtable
group by a % 2

Condensed SQL Fiddle Demo

要将此应用于您的查询,请尝试以下操作:

SELECT PRTH.PostDate, HRRM.LastName, HRRM.FirstName, 
    Sum(PRTH.Hours) AS 'Sum of Hours', (PRTH.Shift % 2) As 'Night Shift'
FROM Viewpoint.dbo.HRRM HRRM
    INNER JOIN Viewpoint.dbo.PRTH PRTH
        ON PRTH.Employee = HRRM.PREmp AND PRTH.JCCo = HRRM.PRCo
GROUP BY PRTH.PostDate, HRRM.LastName, HRRM.FirstName, PRTH.Shift % 2

另请注意,我使用INNER JOIN语法替换了您的联接 - 这是更可取的。有关详细信息,请参阅此帖子(https://stackoverflow.com/a/1018825/1073631