#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
не бывает.