2013-03-27 37 views
4

如果這是一個簡單的問題,我很新奇如此道歉。請注意,此問題與Microsoft Query有關,因爲我正在將結果提交到報告。SQL查詢 - mod函數 - 如何使用它來分組結果?

我目前有一個列的數量,其中包括一列是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功能。

在此先感謝

+0

當你在學習,閱讀這個:[壞習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/ 10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的表*樣式列表已停止使用ANSI - ** 92 ** SQL標準( **20年前!)。 – 2013-03-27 06:01:59

+0

謝謝 - 我將閱讀並留意以備將來使用。您可以將MS Query歸咎於不良連接 - 即使用拖放關係選取器鏈接表時生成的代碼。由於我使用的查詢並不複雜,查詢完成後不可能進行任何編輯,因此沒有看到改變它的很多要點。 – pmc086 2013-03-27 06:08:24

回答

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 

另外注意,我替換了yo你加入了INNER JOIN語法 - 這是更可取的。看到這篇文章的更多信息(https://stackoverflow.com/a/1018825/1073631

+0

非常好。非常感謝您的時間和迴應。到底是什麼我以後。 – pmc086 2013-03-27 01:02:11

+0

@ user2213730 - np,很高興能幫到你! – sgeddes 2013-03-27 01:38:36