Невозможно связать отскок между идентификатором из нескольких частей и двусмысленным именем столбца - PullRequest
1 голос
/ 21 марта 2019

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

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

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

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

Msg 4104, Уровень 16, Состояние 1, Строка 3
Не удалось связать идентификатор из нескольких частей "Client.ConsltNum".

Сообщение 4104, уровень 16, состояние 1, строка 3
Идентификатор из нескольких частей "Client.ConsltNum"не может быть связан.

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

1 Ответ

2 голосов
/ 21 марта 2019

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

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.
  • Используйте только одинарные кавычки для констант строки и даты. Дайте столбцам имена, которые не нужно экранировать.
  • Вы могли бы хорошо использовать COUNT(*), потому что вы знаете, ConsltNum никогда не будет NULL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...