按年分组的最简单方法

时间:2018-01-09 14:05:35

标签: sql sql-server

我有一个表员工,其中包含以下属性: EmployeeID,DateOfHire,姓名,姓氏

DateOfHire 的格式为 YYY-MM-DD HH:HH:HH (smalldatetime)。 我正在使用微软的SSMS。

我想知道每年雇用多少员工。

我试过这样的事情:

from DigitalClockFile import DigitalClock
from generatedUI import Ui_mainWindow
from PyQt5.QtCore import QTime, QTimer
from PyQt5.QtWidgets import QApplication, QLCDNumber
from PyQt5 import QtWidgets,QtCore


class transformedUI(Ui_mainWindow):
    def __init__(self):
        super(transformedUI,self).__init__()
    def setupUi(self,mainWindow):
        super(transformedUI,self).setupUi(mainWindow)
        self.DigitalClock=DigitalClock(self.centralwidget)
        self.DigitalClock.setGeometry(QtCore.QRect(110, 190, 200, 100))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = transformedUI()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

这个有效,但我不想使用 DATEPART

和此:

SELECT DATEPART(YEAR,DateOfHire), COUNT(EmployeeID) AS 
HiredEmployees
FROM Employees
GROUP BY DATEPART(YEAR,DateOfHire)

第一个是好的,而第二个给我一个转换错误(smalldatetime - 字符串)。

按雇佣年份对员工进行分组的最简单方法是什么?可以在不使用 DATEPART 或任何功能的情况下完成吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

SELECT YEAR(DateOfHire), COUNT(EmployeeID) AS HiredEmployees
FROM Employees
GROUP BY YEAR(DateOfHire)

它将为您提供Employees表中每个日期的年份以及与其匹配的员工ID的计数。

这假设DateOfHire字段是日期列

答案 1 :(得分:1)

我无法看到你的第一个不起作用:

select YEAR(DateOfHire) yr,COUNT(*) ct
from Employees
group by YEAR(DateOFHire)

答案 2 :(得分:1)

使用DATEPART或类似功能是您最好的选择。你第一节的方式就好了。我建议只使用它。另外,为了使代码更易于阅读,您可以使用DATEPART

进行内部选择
SELECT *,COUNT(EmployeeID) FROM (
    SELECT
        *,
        DATEPART(YEAR,DateOfHire) AS YearOfHire
    FROM Employees
)
GROUP BY YearOfHire

答案 3 :(得分:1)

  

按雇佣年份对员工进行分组的最简单方法是什么?可以在不使用DATEPART或任何功能的情况下完成吗?

没有。 DATEPART或YEAR是您最好的选择。如果您愿意,可以创建一个计算列Year,它将从您的datetime计算出来。然后,您可以按此列进行分组,而无需任何功能。而且我也会为此查询在此列上创建一个索引。

ALTER TABLE Employees
    ADD DateOfHireYear AS DATEPART(YEAR,DateOfHire) PERSISTED
GO

SELECT DateOfHireYear, COUNT(EmployeeID) AS 
HiredEmployees
FROM Employees
GROUP BY DateOfHireYear