2017-01-31 88 views
-2

Вот кодыКонверсия удалось при преобразовании значения VARCHAR «Steven» к типу данных междунар

SELECT d.department_id, d.department_name, COUNT(e.Employee_ID) AS '# of employees', AVG(e.Salary) AS 'AveSalary' 
FROM employees e , departments d 
WHERE e.department_id = d.Department_ID 
GROUP BY d.Department_id, d.department_name 
UNION ALL 
SELECT e.first_name,e.Last_Name, e.job_id,e.Salary 
FROM employees e , departments d 
WHERE e.department_id = d.department_id; 
+2

Вы должны объяснить, что вы хотите сделать. И, пометьте свой вопрос с помощью базы данных, которую вы используете. –

ответ

1

Проблема заключается в том, что вы UNION ING 2 наборов данных, которые имеют различные типы данных столбцов.

Первая часть: INT, CHAR, INT, INT

Вторая часть: голец, голец, Int, Int

Когда это объединение, он пытается разрешить конфликт между столбцами согласно к Data Type Precedence, поэтому он пытается преобразовать 1-й столбец второго запроса в тип данных int, где он не работает.

Немедленное исправление было бы бросить на 1-й столбец первого запроса к полукоксу так:

SELECT CAST (d.department_id AS NVARCHAR(100)), d.department_name, COUNT(e.Employee_ID) AS '# of employees', AVG(e.Salary) AS 'AveSalary' 
FROM employees e , departments d 
WHERE e.department_id = d.Department_ID 
GROUP BY d.Department_id, d.department_name 

UNION ALL 

SELECT e.first_name,e.Last_Name, e.job_id,e.Salary 
FROM employees e , departments d 
WHERE e.department_id = d.department_id; 
+0

Спасибо за ответ, я оценил вашу помощь! Спасибо. –

+0

Не стоит беспокоиться, но, как предлагает Гордон Линофф, это, вероятно, не тот запрос, который вы хотите запустить. Мы могли бы предоставить дополнительную помощь с надлежащим контекстом –

0

Я подозреваю, что это запрос вы хотите:

SELECT e.first_name, e.Last_Name, e.job_id, e.Salary, 
     d.department_id, d.department_name, 
     COUNT(*) OVER (PARTITION BY d.department_id) as NumEmployees 
FROM employees e JOIN 
    departments d 
    ON e.department_id = d.department_id; 

Я вижу нет (разумной) причины помещать информацию отдела в некоторые строки, а информацию сотрудника - о других.

+0

Это ссылка на результат, который мы пытаемся достичь: https://drive.google.com/file/d/0B3c1oRuY8ScUcjBIQ1NCdWI3TGs/view?ts=588fde52 Мы не можем казаться чтобы проектировать идеальный выход для проблемы. –

+0

@VcutMan. , , Вы должны задать другой вопрос. Насколько мне известно, это не связано с этим вопросом. Вы должны включить образцы данных и желаемые результаты. –

0

Недавно я обратился за помощью с этим вопросом, и я этому учил:

select d.department_id, d.department_name, COUNT(e1.employee_id) as 'Employees', 
ISNULL(convert(varchar, avg(e1.salary)),'No Average') as avesal, 
e2.last_name, e2.salary, e2.job_id 
from Departments d, Employees e1, Employees e2 
where d.Department_ID=e1.Department_ID 
and d.Department_ID = e2.Department_ID 
group by d.Department_ID, d.Department_Name, e2.Last_Name, e2.Salary, e2.Job_ID 
order by d.Department_ID, employees 

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

Снова, это то, на что ответил класс.