📜  生成月明智报告的 SQL 查询

📅  最后修改于: 2022-05-13 01:54:46.626000             🧑  作者: Mango

生成月明智报告的 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);

输出: