生成月明智报告的 SQL 查询
在本文中,我们将学习 SQL Query 如何从表中按月提取数据或按月生成报告,我们将通过示例来实现它以便更好地理解。我们将按步骤进行。
在这里,我们将讨论如何在使用 DATENAME( )函数的 SQL 查询的帮助下,每月从表中提取数据或生成月明智的报告。
日期名称( ):
这个函数是SQL的一个定义函数。它用于提取数据的特定部分。此函数将结果提取为字符串类型值。
句法:
DATENAME( required part of date,date)
此处所需的日期参数为:
- 年,yyyy,yy: 年
- 月,毫米,米:月
- day,dy,y: 天。和 DateTime 的另一部分。
用于执行查询以查找月报表。我们将创建一个数据库“SAMPLE”,我们将在名为“SAMPLE”的数据库中创建一个表“NEWJOINEE”。我们将按照以下步骤来实现这个查询
步骤 1:创建数据库
创建名为SAMPLE的数据库的SQL server语句如下
询问:
Create database SAMPLE;
步骤 2:使用数据库
切换数据库上下文SAMPLE的SQL语句如下:
询问:
Use SAMPLE;
第三步:在数据库中创建表
用于在数据库中创建表。我们需要在 Microsoft SQL Server 中执行查询。像Mysql、Oracle等,我们会用到这个查询:
句法:
create table table_name(
column1 type(size),
column2 type(size),
.
.
.
columnN type(size)
);
询问:
DECLARE @date DATE;
DECLARE @start_date DATE;
DECLARE @end_date DATE;
DECLARE @loop_date DATE;
-- declaring a table variable
DECLARE @dates TABLE (date DATE);
-- setting the first and the last date in the month given by date
SET @date = '2021/08/1';
SET @start_date = DATEFROMPARTS(YEAR(@date ), MONTH(@date ), '01');
SET @end_date = EOMONTH(@date);
-- check dates
SELECT
@date AS cur_date,
@start_date AS first_date,
@end_date AS last_date;
-- populating a table (variable) with all dates in a given month
SET @loop_date = @start_date;
WHILE @loop_date <= @end_date
BEGIN
INSERT INTO @dates(date) VALUES (@loop_date);
SET @loop_date = DATEADD(DAY, 1, @loop_date);
END;
CREATE TABLE NEWJOINEE
( EMPNAME VARCHAR(25) NOT NULL,
EMPCONTACT BIGINT,
DATEOFJOIN DATE NOT NULL,
DESIGNATION VARCHAR(20)
);
步骤 4:向表中插入数据
要将数据插入表中,我们将在 SQL Server 中使用查询。
句法:
insert into table_name(
value1,
value2,
value3,...valueN);
询问:
INSERT INTO NEWJOINEE
VALUES ('VISHAL',9193458625,'12-JAN-2021','SYSTEM ENGINEER'),
('RAM',7856958725,'22-JAN-2021','MANAGER'),
('VIPIN',91458458625,'25-JAN-2021','SYSTEM ENGINEER'),
('VINOD',9759554664,'28-JAN-2021','MANAGER'),
('AKASH',7500554664,'18-JAN-2021','EXECUTIVE'),
('RAJ',7856958625,'02-FEB-2021','MANAGER'),
('AJAY',9756644159,'20-FEB-2021','SYSTEM ENGINEER'),
('SHYAM',919347625,'12-FEB-2021','EXECUTIVE'),
('VIPIN',91458458625,'25-FEB-2021','SYSTEM ENGINEER'),
('VIJAY',7858458625,'25-FEB-2021','EXECUTIVE'),
('VIKASH',9759554664,'28-FEB-2021','SYSTEM ENGINEER'),
('VIVEK',9193458625,'12-MAR-2021','MANAGER'),
('ANUJ',91458458625,'25-MAR-2021','EXECUTIVE'),
('AKASH',7500554664,'18-MAR-2021','MANAGER'),
('RAKESH',7845758725,'22-MAR-2021','EXECUTIVE');
输出:
第五步:月报表查询
询问:
SELECT MAX(DATENAME(MM,DATEOFJOIN)) AS JOININGMONTH, COUNT(1) AS "TOTALEMP. JOIN"
FROM NEWJOINEE GROUP BY MONTH(DATEOFJOIN);
输出: