如何根据查询参数日期及其对应的工作日在 SQL 中创建报告
How to create report in SQL based on query parameter date and its corresponding weekday
我的SQLtable如下
用户每天都在更新数据,并且 report_date 会随着任何用户更新数据而更改。现在我需要根据日期作为参数从上面的 table 生成一个报告。例如,如果查询参数 (Report_date) 为 1-Feb-20,则报告应为
Rly, Sum of Trains on weekday corresponding to the query date (火车总和 Sch_SAT is Y as Saturday is weekday for 1-Feb-20), Sum of trains (where Report_date is equal to query date and Sch_SAT is Y), Sum of Trains where Sch_SAT is Y and Report_date is not equal to query date.所需的报告如下:
是否可以生成上述报告?如果可以,请帮忙。
感谢您在本论坛上以 table 形式提出问题的宝贵提示。我会在以后的问题中牢记。我通过拆分和重新加入 table 获得了预期的结果。我的 SQL 查询(存储过程)是
USE [Loco_bank]
GO
/****** Object: StoredProcedure [dbo].[HOG_summary] Script Date: 02/13/2020 10:19:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[HOG_summary] @Sunday varchar(1), @Monday varchar(1), @Tuesday varchar(1), @Wednesday varchar(1), @Thursday varchar(1), @Friday varchar(1), @Saturday varchar(1), @dt DATETIME AS
Begin
SELECT Zrly as Master_Zrly, COUNT(Train) as Trains_sch INTO #tab1 FROM Hotel_load WHERE ([Saturday] = @Saturday OR @Saturday IS NULL) AND ([Sunday] = @Sunday OR @Sunday IS NULL) AND ([Monday] = @Monday OR @Monday IS NULL) AND ([Tuesday] = @Tuesday OR @Tuesday IS NULL) AND ([Wednesday] = @Wednesday OR @Wednesday IS NULL) AND ([Thursday] = @Thursday OR @Thursday IS NULL) AND ([Friday] = @Friday OR @Friday IS NULL)
GROUP BY Zrly
SELECT Zrly, COUNT(updated_on) as Reported, COUNT(HOG_loco_type_master) as HOG_Run, (COUNT(updated_on) - COUNT(HOG_loco_type_master)) as NONHOG_Run INTO #tab2 FROM Hotel_load WHERE ([Saturday] = @Saturday OR @Saturday IS NULL) AND ([Sunday] = @Sunday OR @Sunday IS NULL) AND ([Monday] = @Monday OR @Monday IS NULL) AND ([Tuesday] = @Tuesday OR @Tuesday IS NULL) AND ([Wednesday] = @Wednesday OR @Wednesday IS NULL) AND ([Thursday] = @Thursday OR @Thursday IS NULL) AND ([Friday] = @Friday OR @Friday IS NULL) AND updated_on = @dt GROUP BY Zrly
SELECT #tab1.Master_Zrly, #tab1.Trains_sch, #tab2.Zrly, #tab2.Reported, #tab2.HOG_Run, #tab2.NONHOG_Run FROM #tab1
LEFT JOIN #tab2 ON #tab1.Master_Zrly = #tab2.Zrly
End
我的查询字符串是:
http://127.0.0.1/HOG/HOG_Report_BD.aspx?Wednesday=Y&dt=12-Feb-2020
输出为
| Master_Zrly | Trains_sch | Reported | HOG_Run | NONHOG_Run |
|-------------|------------|----------|---------|------------|
| SCR | 25 | 9 | 18 | 2 |
| NCR | 9 | 2 | 5 | 4 |
| SWR | 13 | 4 | | |
| ER | 28 | 7 | 22 | 1 |
| WCR | 13 | 6 | 7 | 5 |
| CR | 40 | 18 | 21 | 10 |
| KR | 1 | 1 | | |
| NWR | 17 | 16 | | |
| ECoR | 11 | 2 | | |
| NR | 99 | 30 | 62 | 6 |
我的SQLtable如下
用户每天都在更新数据,并且 report_date 会随着任何用户更新数据而更改。现在我需要根据日期作为参数从上面的 table 生成一个报告。例如,如果查询参数 (Report_date) 为 1-Feb-20,则报告应为
Rly, Sum of Trains on weekday corresponding to the query date (火车总和 Sch_SAT is Y as Saturday is weekday for 1-Feb-20), Sum of trains (where Report_date is equal to query date and Sch_SAT is Y), Sum of Trains where Sch_SAT is Y and Report_date is not equal to query date.所需的报告如下:
是否可以生成上述报告?如果可以,请帮忙。
感谢您在本论坛上以 table 形式提出问题的宝贵提示。我会在以后的问题中牢记。我通过拆分和重新加入 table 获得了预期的结果。我的 SQL 查询(存储过程)是
USE [Loco_bank]
GO
/****** Object: StoredProcedure [dbo].[HOG_summary] Script Date: 02/13/2020 10:19:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[HOG_summary] @Sunday varchar(1), @Monday varchar(1), @Tuesday varchar(1), @Wednesday varchar(1), @Thursday varchar(1), @Friday varchar(1), @Saturday varchar(1), @dt DATETIME AS
Begin
SELECT Zrly as Master_Zrly, COUNT(Train) as Trains_sch INTO #tab1 FROM Hotel_load WHERE ([Saturday] = @Saturday OR @Saturday IS NULL) AND ([Sunday] = @Sunday OR @Sunday IS NULL) AND ([Monday] = @Monday OR @Monday IS NULL) AND ([Tuesday] = @Tuesday OR @Tuesday IS NULL) AND ([Wednesday] = @Wednesday OR @Wednesday IS NULL) AND ([Thursday] = @Thursday OR @Thursday IS NULL) AND ([Friday] = @Friday OR @Friday IS NULL)
GROUP BY Zrly
SELECT Zrly, COUNT(updated_on) as Reported, COUNT(HOG_loco_type_master) as HOG_Run, (COUNT(updated_on) - COUNT(HOG_loco_type_master)) as NONHOG_Run INTO #tab2 FROM Hotel_load WHERE ([Saturday] = @Saturday OR @Saturday IS NULL) AND ([Sunday] = @Sunday OR @Sunday IS NULL) AND ([Monday] = @Monday OR @Monday IS NULL) AND ([Tuesday] = @Tuesday OR @Tuesday IS NULL) AND ([Wednesday] = @Wednesday OR @Wednesday IS NULL) AND ([Thursday] = @Thursday OR @Thursday IS NULL) AND ([Friday] = @Friday OR @Friday IS NULL) AND updated_on = @dt GROUP BY Zrly
SELECT #tab1.Master_Zrly, #tab1.Trains_sch, #tab2.Zrly, #tab2.Reported, #tab2.HOG_Run, #tab2.NONHOG_Run FROM #tab1
LEFT JOIN #tab2 ON #tab1.Master_Zrly = #tab2.Zrly
End
我的查询字符串是:
http://127.0.0.1/HOG/HOG_Report_BD.aspx?Wednesday=Y&dt=12-Feb-2020
输出为
| Master_Zrly | Trains_sch | Reported | HOG_Run | NONHOG_Run |
|-------------|------------|----------|---------|------------|
| SCR | 25 | 9 | 18 | 2 |
| NCR | 9 | 2 | 5 | 4 |
| SWR | 13 | 4 | | |
| ER | 28 | 7 | 22 | 1 |
| WCR | 13 | 6 | 7 | 5 |
| CR | 40 | 18 | 21 | 10 |
| KR | 1 | 1 | | |
| NWR | 17 | 16 | | |
| ECoR | 11 | 2 | | |
| NR | 99 | 30 | 62 | 6 |