Создать представление функции SQL с идентификатором пользователя и диапазоном дат - PullRequest
0 голосов
/ 17 декабря 2018

Как говорит заголовок, мне нужно создать представление функций из двух таблиц.

Ниже приведены таблицы 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

На основе предыдущей информации мне нужна функция для отображения Assign Specialist и дат, когда был создан Инцидент .

Правильно знаю, вот что я получил:

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

Единственное, чего не хватает - это диапазона дат.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я полагаю, вы изменили имена таблиц и полей на английский с испанского.Вы пропустили некоторые из них, а некоторые пропущены скобки.Насколько я понимаю, я изменил их, чтобы лучше понять.

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
0 голосов
/ 17 декабря 2018

Я думаю, что этот запрос может помочь вам.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...