Как получить один столбец из одной записи в запросе SQL? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь получить полное имя таблицы @MechanicExpertTable по запросу select, но получаю сообщение об ошибке

Неверный синтаксис рядом с ключевым словом «SELECT».

Мой код:

DECLARE @MechanicExpertTable AS TABLE 
                                (
                                     Id INT, 
                                     FirstName NVARCHAR(128), 
                                     LastName NVARCHAR(128)
                                );

INSERT INTO @MechanicExpertTable
    SELECT 
        PROFILE.Id,
        PROFILE.FirstName,
        PROFILE.LastName
    FROM   
        EstimatedRialMechanicExpert
    INNER JOIN 
        PROFILE ON EstimatedRialMechanicExpert.ProfileId = PROFILE.Id
    WHERE  
        EstimatedRialId = @id

DECLARE @MechanicExpert1 NVARCHAR(128) = 
    SELECT TOP(1) 
        ROW_NUMBER() OVER(ORDER BY Id ASC) AS rownumber,
        @MechanicExpertTable.FirstName + ' ' + @MechanicExpertTable.LastName
    FROM   
        @MechanicExpertTable
    WHERE  
        rownumber = 3 

Как это исправить?

Ответы [ 2 ]

3 голосов
/ 02 июня 2019

Если вы хотите получить полное имя для конкретной должности, попробуйте следующий пример.В вашем случае ROW_NUMBER() используется без PARTITION BY, поэтому TOP(1) не требуется.

Ввод:

DECLARE @MechanicExpertTable AS TABLE (
   Id INT, 
   FirstName NVARCHAR(128), 
   LastName NVARCHAR(128)
);
INSERT INTO @MechanicExpertTable
   (Id, FirstName, LastName)
VALUES
   (1, 'FirstName1', 'LastName1'),
   (2, 'FirstName2', 'LastName2'),
   (6, 'FirstName6', 'LastName6'),
   (7, 'FirstName7', 'LastName7'),
   (9, 'FirstName9', 'LastName9')

T-SQL:

DECLARE @MechanicExpert1 NVARCHAR(128)
SELECT TOP(1) @MechanicExpert1 = FullName
FROM (
    SELECT
        ROW_NUMBER() OVER(ORDER BY Id ASC) AS rownumber,
        FirstName + ' ' + LastName AS FullName
    FROM @MechanicExpertTable
) t    
WHERE rownumber = 3 

PRINT @MechanicExpert1

Вывод:

FirstName6 LastName6
1 голос
/ 02 июня 2019

Отсутствуют скобки. Добавьте () для вашего подзапроса, и код должен быть таким, как показано ниже -

DECLARE @MechanicExpert1 NVARCHAR(128) = 
(
    SELECT TOP 1 T
    FROM
    (
        SELECT ROW_NUMBER() OVER(ORDER BY Id ASC) AS rownumber,
        @MechanicExpertTable.FirstName + ' ' + @MechanicExpertTable.LastName AS T
        FROM  @MechanicExpertTable
    )A WHERE   rownumber = 3 
)

Примечание: Я добавил ТОП-1 в выборку, которая была доступна в вашем скрипте. В основном, когда вы фильтруете с RowNumber = 3, нет шансов получить несколько строк. Вы можете удалить «TOP 1» из скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...