Как создать отчет в SQL на основе даты параметра запроса и соответствующего дня недели - PullRequest
0 голосов
/ 04 февраля 2020

Моя SQL таблица соответствует enter image description here

Данные обновляются пользователями ежедневно, а дата отчета изменяется, как и при обновлении данных любым пользователем. Теперь мне нужно сгенерировать отчет из приведенной выше таблицы на основе даты в качестве параметра. Например, если параметр запроса (Report_date) имеет значение 1-февраля-20, то отчет должен быть Rly, сумма поездов в день недели, соответствующая дате запроса (сумма поездов, где Sch_SAT - Y, поскольку суббота - день недели для 1-февраля-20 ), Сумма поездов (где Report_date равна дате запроса, а Sch_SAT - Y), Сумма поездов, где Sch_SAT - Y, а Report_date не равна дате запроса. Требуемый отчет выглядит так: enter image description here

Возможно ли создать вышеуказанный отчет? Если возможно, пожалуйста, помогите.

1 Ответ

1 голос
/ 14 февраля 2020

Спасибо за ценные советы по заданию вопросов в презентабельной форме на этом форуме. Я буду иметь в виду в будущих выпусках. Я достиг желаемых результатов, разделив и присоединившись к таблице. Мой 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          |
...