2013-05-07 2 views
0

У меня есть этот запрос, и я хочу получить результаты обоих этих запросов. Обратите внимание, что machine_output вида я создал:SQL-сервер ошибка преобразования

SELECT DISTINCT tblcertified.employeenumber, 
       tblcertified.machinenumber 
FROM tblcertified 
     INNER JOIN machine_output 
       ON tblcertified.machinenumber = machine_output.machinenumber 
UNION 
SELECT CONVERT (DATE, tblperiod.fromdate) AS fDate, 
     tblscheduled.employeenumber 
FROM tblperiod 
     INNER JOIN tblscheduled 
       ON tblperiod.number = tblscheduled.number 
WHERE tblperiod.fromdate BETWEEN Dateadd(m, -3, Getdate()) AND Getdate() 

При работе выше, я получаю следующую ошибки:

Msg 241, Level 16, State 1, Line 1 преобразование не удалось при преобразовании дата и/или время из символьной строки.

Я также получаю эту ошибку, когда я паденияconvert заявления.

+0

Даже если вы можете преобразовать его, имеет ли он тот же тип, что и Employeenumber (в первом запросе)? вы знаете, что в UNION оба запроса должны иметь одинаковый тип и одинаковое количество столбцов в своих результирующих наборах? –

ответ

2

Ваш первый столбец в первом подзапросе называется EmployeeNumber.

Ваш первый столбец во второй таблице преобразуется в Date.

Я не думаю, что вы хотите union, но вы знакомы с объединениями. Списки select должны соответствовать union.

Если вы хотите, чтобы это исправить, изменить первый выбрать что-то вроде:

select distinct cast(NULL as date) as fDate, tblcertified.employeenumber, tblcertified.machinenumber 

и второй выбор на что-то вроде:

SELECT CONVERT (DATE, tblperiod.fromdate) AS fDate, 
     tblscheduled.employeenumber , NULL 

Как join, ваш запрос будет выглядеть например:

SELECT DISTINCT CONVERT (DATE, tblperiod.fromdate) AS fDate, tblcertified.employeenumber, 
       tblcertified.machinenumber 
FROM tblcertified 
     INNER JOIN machine_output 
       ON tblcertified.machinenumber = machine_output.machinenumber 
     INNER JOIN tblscheduled 
       on tblscheduled.employeenumber = tblcertified.employeenumber 
     INNER JOIN tblperiod 
       ON tblperiod.number = tblscheduled.number 
WHERE tblperiod.fromdate BETWEEN Dateadd(m, -3, Getdate()) AND Getdate() ; 

Это немного догадка о том, что вы хотите (у вас нет sam чтобы дать понять это). Но вы можете сделать все соединения в одном запросе и вытащить нужные столбцы.

+0

О, так что я действительно не после союза. Я хочу получить результаты в одном запросе, а не в двух столбцах. Как мне это сделать? – user2023203

+0

Это именно то, что мне нужно, спасибо – user2023203

Смежные вопросы