Программирование на SQL | Задание 5. Создать хранимую процедуру

В этом разделе сайта попытаемся разобраться с программированием баз данных. Язык называется SQL. В этом языке нет или почти нет классов, переменных, массивов и циклов. Сравнивать его с языками высокого уровня не имеет смысла. Но без него Вы не сможете написать интерфейс для настольных приложений Windows или интернет сайтов. Для Разработчика надо обязательно надо знать SQL, библиотеки обработки данных на C#, Microsoft Visual Studio, Microsoft SQL Server Management Studio или dbForge Studio for SQL Server

Задание 5. Создать хранимую процедуру

Заключительным этапом прохождения квалификационного отбора необходимо создать хранимую процедуру.

Входные параметры :

  • период бурения  (даты от-до),
  • код месторождения

Выход :

Кол-во проб по элементам в каждом классе содержания за выбранный период бурения  по месторождению (пустые классы не выводить, использовать связь со справочником классов). Выходной результат должен быть пронумерован, классы отсортированы по возрастанию. Результат  процедуры выводится только на экран  в SQL Server Management Studio, сохранять в какую-либо таблицу  НЕ НАДО! Без использования временных таблиц!

Пример выходных данных.

Номер по порядку   Класс        Кол-во проб Ni   Кол-во проб Cu   Кол-во проб Pt   Кол-во проб Pd  
1                   0.00005-0.001         3                               4                                8                   0
2                   0.005-0.01               3                               0                                8                   0
3                   0.5-1                        0                               0                                8                   0
4                   1-10                         0                               0                                1                   1

 (предоставить скрипт создания процедуры, пример использования : входные данные , результат)

GO
  /*
  -- Тестирование
	EXEC Example05_SP '20230301', '20230401', 100 -- 7 строк
	EXEC Example05_SP '20230601', '20230701', 100 -- Нет строк
  */
CREATE PROCEDURE [dbo].[Example05_SP] 
  @DateFrom DateTime = NULL, 
  @DateTo DateTime = NULL,
  @CodePlace int = 100 -- Код месторождения
AS
BEGIN
	SET NOCOUNT ON;
	SELECT  ROW_NUMBER() OVER (ORDER BY res.класс) as [Номер по порядку] 
	,*
    FROM
		( SELECT
		  spr.ИмяКласса as класс
		  ,( SELECT Count(*) FROM [dbo].[ХимическиеАнализы] an 
			   WHERE dbo.cls(an.СодержаниеNi) = spr.ИмяКласса and
			   (an.[Код скважины] IN (SELECT * from dbo.tbl(@DateFrom,@DateTo,@CodePlace))
			 ))   as [кол-во проб Ni]

		  ,( SELECT Count(*) FROM [dbo].[ХимическиеАнализы] an 
			   WHERE dbo.cls(an.СодержаниеCu) = spr.ИмяКласса and
			   (an.[Код скважины] IN (SELECT * from dbo.tbl(@DateFrom,@DateTo,@CodePlace))
			))   as [кол-во проб Cu]
	
		   ,( SELECT Count(*) FROM [dbo].[ХимическиеАнализы] an 
			   WHERE dbo.cls(an.СодержаниеPd) = spr.ИмяКласса and
			   (an.[Код скважины] IN (SELECT * from dbo.tbl(@DateFrom,@DateTo,@CodePlace))
			))   as [кол-во проб Pd]

			,( SELECT Count(*) FROM [dbo].[ХимическиеАнализы] an 
			   WHERE dbo.cls(an.СодержаниеPt) = spr.ИмяКласса and
			   (an.[Код скважины] IN (SELECT * from dbo.tbl(@DateFrom,@DateTo,@CodePlace))
			))   as [кол-во проб Pt]

		  FROM [dbo].[СправочникКлассовХимЭлементов] spr ) res
		  WHERE [кол-во проб Ni] <> 0 OR 
		        [кол-во проб Cu] <> 0 OR 
				[кол-во проб Pd] <> 0 OR 
				[кол-во проб Pt] <> 0
		  ORDER BY res.класс

END
GO

Вот и все, если Вы решили все пять задач за разумное время, которое было указано ранее, то можно сказать Вы прошли квалификационный отбор и должны претендовать на высокую должность программиста SQL Server. Вы думаете, что такие задачи на SQL достаточно сложные. А вот и нет, все не так просто попробуйте решить задачу номер 6.

Полное решение дано по этой ссылке Набор квалификационных решений SQL Server 

Добавить комментарий

Loading