Как сказано в заголовке, мне нужно создать представление функций из двух таблиц.
Ниже приведены таблицы SQL
CREATE TABLE User_Specialist(
ID_User_Specialist INT NOT NULL,
Name_User_Specialist VARCHAR(50) NOT NULL,
CONSTRAINT PK_ID_User_Specialist PRIMARY KEY(ID_User_Specialist),
GO
CREATE TABLE Incident(
ID_Incident INT IDENTITY(1,1) NOT NULL,
Incident_Creation_Date DATETIME NULL,
Assigned_Specialist INT NULL,
CONSTRAINT FK_Assigned_Specialist FOREIGN KEY (Especialista_Asignado) REFERENCES Usuario_Especialista(ID_Usuario_Especialista),
GO
Основываясь на предыдущей информации, мне нужна функция для отображения Назначить специалиста и даты создания Инцидент.
Правильно знаю, что у меня есть:
CREATE FUNCTION View_Date (@ID_User_Incident INT)
RETURNS INT
AS
BEGIN
DECLARE @Total_Incidents INT
SELECT @Total_Incidents = COUNT(ID_Incident)
FROM Incidents i, User_Specialist u
WHERE i.ID_Incident = u.ID_User_Specialist AND u.ID_User_Specialist =@ID_User_Incident
RETURN (@Total_Incidents)
END
GO
DECLARE @Specialist_ID int;
EXEC @Specialist_ID = [dbo].View_Date
@ID_Incidentes_Usuarios = 5;
SELECT @Specialist_ID AS 'Assigned Specialist Incidents'
GO
Не хватает только диапазона дат.
В настоящее время используется SSMS 2017 (SQL Server Management Studio)
@ AarónHenríquez Если вы хотите увидеть общее количество инцидентов, дату первого и последнего инцидента, относящуюся к назначенному специалисту, вам необходимо изменить функцию на Табличную функцию.
Думаю, этот запрос может вам помочь.
declare @count int = 0 , @dates varchar(200) =''
SELECT @count+=1 , @dates +=' '+ i.Incident_Creation_Date
FROM Incidents i, User_Specialist u
WHERE i.ID_Incident = u.ID_User_Specialist AND u.ID_User_Specialist =@ID_User_Incident
select @count as [count] ,@dates [incidentDates]
Я полагаю, вы изменили свои имена таблиц и полей на английские с испанского. Вы пропустили некоторые из них, в некоторых отсутствовали скобки. Насколько я понимаю, я изменил их, чтобы лучше понять.
CREATE TABLE User_Specialist
(
ID_User_Specialist INT NOT NULL,
Name_User_Specialist VARCHAR(50) NOT NULL
CONSTRAINT PK_ID_User_Specialist PRIMARY KEY(ID_User_Specialist)
)
GO
CREATE TABLE Incident
(
ID_Incident INT IDENTITY(1,1) NOT NULL,
Incident_Creation_Date DATETIME NULL,
Assigned_Specialist INT NULL
CONSTRAINT FK_Assigned_Specialist FOREIGN KEY (Assigned_Specialist) REFERENCES User_Specialist(ID_User_Specialist)
)
GO
Если вы хотите видеть в результате несколько столбцов или строк, вам необходимо использовать Table-valued Function
. Я создал образец запроса из вашей таблицы и подготовил функцию. вы можете изменить его на то, что хотите.
CREATE FUNCTION dbo.FN_ViewDate
(
@ID_User_Incident INT
)
RETURNS @Result TABLE
(
TotalIncidents INT
,FirstIncidentDate DATETIME
,LastIncidentDate DATETIME
)
AS
BEGIN
INSERT INTO @Result
SELECT COUNT(ID_Incident)
,MIN(Incident_Creation_Date)
,MAX(Incident_Creation_Date)
FROM Incident I
LEFT JOIN User_Specialist U ON I.Assigned_Specialist = U.ID_User_Specialist
WHERE I.Assigned_Specialist = @ID_User_Incident
RETURN
END
GO
Быстрый вопрос, поскольку я впервые использую таблицу функций. Как вы делаете, чтобы вставить значения, чтобы подтвердить отображаемую информацию в таблице?
@ AarónHenríquez, извини, я не понял вопроса.
Какие СУБД вы используете? (Этот код зависит от продукта.)