Не удалось связать переход между идентификатором, состоящим из нескольких частей, и неоднозначным именем столбца

#sql-server

#sql-server

Вопрос:

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

Во-первых, вот мой код:

 SELECT 
    ConsltNum AS 'Consultant Number', 
    COUNT(ConsltNum) AS 'Client Count', 
    AVG(Balance) AS 'Average'
FROM
    Client Cl
INNER JOIN 
    Consultant Cn ON Cl.ConsltNum = Cn.ConsltNum
GROUP BY 
    Cn.LastName
  

После запуска я получаю это.

Сообщение 209, уровень 16, состояние 1, строка 3
Неоднозначное имя столбца ‘ConsltNum’.

Сообщение 209, уровень 16, состояние 1, строка 3
Неоднозначное имя столбца ‘ConsltNum’.

Теперь я знаю, что это неоднозначно, потому что ConsltNum существует в обеих таблицах, которые я включил. Обычно я бы попытался подключиться к этой базе данных, изменив код на этот:

 SELECT 
    Client.ConsltNum AS 'Consultant Number', 
    COUNT(Client.ConsltNum) AS 'Client Count', 
    AVG(Balance) AS 'Average'
FROM
    Client Cl
INNER JOIN 
    Consultant Cn ON Cl.ConsltNum = Cn.ConsltNum
GROUP BY 
    Cn.LastName
  

После запуска этого я получаю:

Сообщение 4104, уровень 16, состояние 1, строка 3
Идентификатор, состоящий из нескольких частей «Клиент.Не удалось привязать «ConsltNum».

Сообщение 4104, уровень 16, состояние 1, строка 3
Идентификатор, состоящий из нескольких частей «Клиент.Не удалось привязать «ConsltNum».

Несколько других вещей, о которых стоит упомянуть: я попытался набрать номер dbo.Client.ConsltNum , и он выдает ту же ошибку.

Ответ №1:

Просто используйте правильный псевдоним:

 SELECT cl.ConsltNum AS Consultant_Number,
       COUNT(*) AS Client_Count, AVG(?.Balance) AS Average
FROM Client Cl INNER JOIN
     Consultant Cn
     ON Cl.ConsltNum = Cn.ConsltNum
GROUP BY cl.ConsltNum;
  

? Это псевдоним таблицы, из которой balance происходит.

Примечания:

  • Вам нужно использовать псевдоним таблицы, назначенный для столбца.
  • GROUP BY Должно соответствовать SELECT столбцу.
  • Используйте только одинарные кавычки для констант string и date. Дайте столбцам имена, которые не нужно экранировать.
  • Вы могли бы использовать COUNT(*) , потому что вы знаете, что ConsltNum этого никогда NULL не бывает.