SQL server -Union转换错误

时间:2013-05-07 16:05:20

标签: sql sql-server

我有这个查询,我想得到这两个查询的结果。请注意,machine_output是我创建的视图:

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() 

运行上述操作时,我收到以下错误

  

消息241,级别16,状态1,行1转换时转换失败   字符串的日期和/或时间。

当我删除 convert语句时,我也会收到此错误。

1 个答案:

答案 0 :(得分: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() ;

这有点猜测你想要什么(你没有样本数据来说清楚)。但是,您可以在一个查询中执行所有连接并提取所需的列。