UNION生成一列最大精度为两列的列

时间:2015-12-23 08:18:09

标签: sql-server-2005

如果组合不同但可转换数据类型的列,UNION的结果将生成一个等于两列最大精度的列数据类型。

CREATE TABLE tab1
(
    col1 DECIMAL(5 ,2)
) 
CREATE TABLE tab2
(
    col2 DECIMAL(5 ,2)
)

INSERT INTO tab1
VALUES
  (
    11.5
  ) 
INSERT INTO tab2
VALUES
  (
    11.65
  )

SELECT col1
FROM   tab1 UNION 
SELECT round(col2,0)
FROM   tab2

结果:

  

11.50

     

12.00

但我应该得到结果

结果:

  

11.50

     

12

有没有办法实现这个目标? tab2中的col2值应舍入为整数,并在结果中显示为整数。

实际上,查询并不是那么简单。

*我已编辑了我的问题以符合我的实际要求。*

1 个答案:

答案 0 :(得分:1)

尝试以下内容,

SELECT CAST(col1 AS VARCHAR(10)) col1
FROM   tab1 UNION 
SELECT CAST(col2 AS VARCHAR(10)) col2
FROM   tab2

正如@Giorgi Nakeur在评论中提到的那样不好但可以解决问题。

我认为根据您更新的问题,你想要这样的东西。见下文。

替代解决方案,

;WITH cte AS (
SELECT col1
FROM   tab1 UNION ALL
SELECT ROUND(col2,0) 
FROM   tab2)

SELECT REPLACE(CAST(Col1 AS varchar(10)),'.00','') col1 FROM cte