浮点值 UNION ALL 查询

Float values UNION ALL query

我有两个 ms sql 服务器表,其中的列类型为 float(非空)。

当我在这两个表中执行 union ALL 时

SELECT [float_column], 
       Min(sourcename) AS ExistsInFile 
FROM   (SELECT [float_column], 
               'File 1' AS SourceName 
        FROM   table1 
        WHERE  column1 = 'abc' 
        UNION ALL 
        SELECT [float_column], 
               'File 2' AS SourceName 
        FROM   table2 
        WHERE  column1 = 'abc') x 
GROUP  BY [float_column] 
HAVING Count(DISTINCT sourcename) <> 2 

它给了我以下输出,但它应该没有任何差异,因为两个值相同。

float_Column     |    ExistsInFile
-53590187.62            File 2
-53590187.62            File 1

这是因为float类型吗?如有任何帮助,我们将不胜感激!

是的,问题是浮动。这里的问题不是union all。问题是 group by.

浮点数可以在表示数字的最小位上有所不同——您看不出其中的差别。因此,对于您的问题,只需将所有内容转换为小数:

SELECT CAST([float_column] as DECIMAL(12, 2), 
       Min(sourcename) AS ExistsInFile 
FROM   (SELECT [float_column], 
               'File 1' AS SourceName 
        FROM   table1 
        WHERE  column1 = 'abc' 
        UNION ALL 
        SELECT [float_column], 
               'File 2' AS SourceName 
        FROM   table2 
        WHERE  column1 = 'abc') x 
GROUP BY CAST([float_column] as DECIMAL(12, 2) 
HAVING Count(DISTINCT sourcename) <> 2 ;