我有这个查询,我想得到这两个查询的结果。请注意,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
语句时,我也会收到此错误。
答案 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() ;
这有点猜测你想要什么(你没有样本数据来说清楚)。但是,您可以在一个查询中执行所有连接并提取所需的列。