查询比较两个不同表中两列的差异
我正在尝试在两个不同表中的两个不同名称的列上创建一个UNION ALL查询。查询比较两个不同表中两列的差异
我想采取USER_EXCEL表中的“MTRL”列,并将其与IM_EXCEL表中的“short_material_number”列进行比较。然后,我想查询只返回两列之间的区别。两列都包含材料编号,但在表格中以不同方式命名(列明)。
我至今是:
(SELECT [MTRL] FROM dbo.USER_EXCEL
EXCEPT
SELECT [short_material_number] FROM dbo.IM_Excel)
UNION ALL
(SELECT [short_material_number] FROM dbo.IM_Excel
EXCEPT
SELECT [MTRL] FROM dbo.USER_EXCEL)
但是,试图运行该查询我收到一条错误消息时:
消息8114,级别16,状态5,行22
将数据类型varchar转换为float时出错。
你几乎可以肯定得到这个错误,因为你的两列的一个是FLOAT
数据类型,而另一个是VARCHAR
。 This article将是一个很好的开始阅读隐式转换的地方,当您尝试比较两个不同数据类型的列时会发生这种情况。
为了得到这个工作,需要将float转换为varchar,如下例所示。
(
SELECT [MTRL] FROM dbo.USER_EXCEL
EXCEPT
SELECT CAST([short_material_number] AS VARCHAR(18)) FROM dbo.IM_Excel
)
UNION ALL
(
SELECT CAST([short_material_number] AS VARCHAR(18)) FROM dbo.IM_Excel
EXCEPT
SELECT [MTRL] FROM dbo.USER_EXCEL
)
这应该修复隐式转换错误。 – Barry 2014-10-17 18:47:16
谢谢大家..我是新来的SQL查询,所以仍然在学习。再次感谢你。 – user3896424 2014-10-17 18:53:21
乐意帮忙!如果这个或任何答案已解决您的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – AHiggins 2014-10-17 18:55:03
从你的问题我明白你试图比较两列,但只返回一个专栏中,我会建议你使用下面的查询并排的差异方面比较
SELECT ue.[MTRL], ie.[short_material_number]
FROM dbo.IM_Excel ie
FULL OUTER JOIN
dbo.USER_EXCEL ue
ON CAST(ie.[short_material_number] AS VARCHAR(20)) = ue.[MTRL]
WHERE ie.[short_material_number] IS NULL
OR ue.[MTRL] IS NULL
我的猜测是,一个的列包含数字值和其他文本。查询是隐式尝试将文本转换为数值,其中一个记录包含无法转换的文本值。 – Barry 2014-10-17 18:42:30
@巴里是啊,就是这样。当然。 – 2014-10-17 18:47:31
请添加“MTRL”和“short_material_number”的数据类型 – Ram 2014-10-17 18:50:53