【发布时间】:2020-09-15 09:02:18
【问题描述】:
我正在尝试组合来自 2 个视图的相同信息,并且两个查询分别产生结果。但是,一旦我使用 Union 将它们组合起来,就会出现错误:
将数据类型 varchar 转换为 bigint 时出错。
我也尝试使用别名作为表名,但它显示相同的错误。
这是我的查询
SELECT DISTINCT
syn.sourcename,
syn.propertyname,
syn.IATA,
syn.iataagencyname,
syn.iataagencyaffiliation,
syn.nightsstayed,
syn.reservationstatus,
syn.departuredate,
syn.reservationroomrate
FROM dbo.vwIATAfactreservationSynXis syn
WHERE syn.reservationstatus != 'C'
AND syn.departuredate >= CONVERT(datetime, '01/01/2020')
AND syn.departuredate <= CONVERT(datetime, GETDATE())
UNION
SELECT DISTINCT
ws.sourcename,
ws.propertyname,
ws.IATA,
ws.iataagencyname,
ws.iataagencyaffiliation,
ws.nightsstayed,
ws.reservationstatus,
ws.departuredate,
ws.reservationroomrate
FROM dbo.vwIATAfactreservationSHR ws
WHERE ws.reservationstatus != 'C'
AND ws.departuredate >= CONVERT(datetime, '01/01/2020')
AND ws.departuredate <= CONVERT(datetime, GETDATE());
【问题讨论】:
-
选择列表中的一列是两个不同查询之间的不同类型。 SQL 将尝试转换为更精确的类型,即 bigint。您应该检查数据类型并将 bigint 显式转换为查询中的 varchar。
-
你的列数据类型在两个表中是不同的,对于union/union所有操作符表的结构需要兼容
-
既然已经在使用
DISTINCT,为什么还要使用UNION? -
能否提供创建表语句。也可能是这个答案会帮助stackoverflow.com/questions/1237784/…
-
为什么你有两个几乎相同的表?
标签: sql sql-server union