Заключительным этапом прохождения квалификационного отбора необходимо создать хранимую процедуру.
Входные параметры :
- период бурения (даты от-до),
- код месторождения
Выход :
Кол-во проб по элементам в каждом классе содержания за выбранный период бурения по месторождению (пустые классы не выводить, использовать связь со справочником классов). Выходной результат должен быть пронумерован, классы отсортированы по возрастанию. Результат процедуры выводится только на экран в 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